Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Neste tutorial, cria um operador SQL UDF para o Lakeflow Designer que publica mensagens nos canais do Slack. Os UDFs SQL são a escolha certa quando uma função precisa de chamar APIs externas via HTTP. Para uma visão geral mais ampla, veja Operadores definidos pelo utilizador no Lakeflow Designer.
Overview
Este operador envia mensagens para o Slack utilizando:
- SQL UDF: Escrito em SQL em vez de Python.
- Ligação HTTP do Unity Catalog: Gerir de forma segura as credenciais da API do Slack.
- Suporte ao modo de pré-visualização: Previne chamadas reais da API do Slack durante a pré-visualização do fluxo de trabalho.
- Parâmetros de expressão: Permite conteúdo dinâmico de mensagens a partir de colunas DataFrame.
Por que usar um UDF SQL
Para os operadores que precisem de chamar APIs externas (como Slack, endpoints REST, webhooks), devem usar UDFs SQL. UDFs e UDTFs em Python não conseguem fazer pedidos HTTP. As UDFs SQL têm acesso à função http_request(), que funciona com ligações do Unity Catalog.
Passo 1: Configurar a ligação HTTP do Unity Catalog
Antes de criar o UDF, precisa de configurar uma ligação HTTP ao Unity Catalog para armazenar de forma segura as credenciais da API do Slack. Substitui <xoxb-your-slack-bot-token> pelo teu token real do Slack Bot. Podes obter isto nas definições da aplicação Slack. Pode usar esta mesma ligação através de vários UDFs. Para saber mais, consulte Ligar a serviços HTTP externos.
-- Create a connection to store Slack credentials securely
CREATE CONNECTION my_slack_connection TYPE HTTP OPTIONS (
host 'https://slack.com',
port '443',
base_path '/api/',
bearer_token '<xoxb-your-slack-bot-token>'
);
Passo 2: Criar o operador YAML
Agora, crie o YAML para o operador. Para detalhes sobre o esquema, veja Referência YAML do operador definido pelo utilizador.
O YAML deste operador inclui:
-
Parâmetro de expressão (
msg): Permite conteúdo dinâmico de mensagens a partir de colunas de dataframe. -
Parâmetro da cadeia (
channel): Nome/ID do canal estático. -
Modo de pré-visualização (
is_preview): Uma propriedade de configuração comformat: is_previewque ativa o modo de pré-visualização para evitar chamadas reais à API durante os testes.
schema: user-defined-operator-v0.1.0
type: uc-udf
name: Send Slack Message
id: send_msg
version: '1.0.0'
description: Send Slack Message to a Channel
config:
type: object
properties:
msg:
type: string
format: expression
title: Message
examples:
- 'Select message column or expression'
x-ui:
widget: expression
port: input_data
channel:
type: string
title: Channel
is_preview:
type: boolean
format: is_preview
default: false
required:
- msg
- channel
additionalProperties: false
ports:
input:
- name: input_data
title: Input Data
output:
- name: output
title: Send Response Data
Isto inclui:
| Chave de Configuração | Widget | Purpose |
|---|---|---|
msg |
expression |
Conteúdo dinâmico da mensagem a partir dos dados de entrada. |
channel |
input |
Canal Slack para enviar (por exemplo, #alerts). |
is_preview |
não aplicável | Uma propriedade de configuração booleana com format: is_preview que permite ao operador agir de forma diferente numa pré-visualização (neste caso, evitar efetivamente criar uma mensagem no Slack). |
Passo 3: Criar a função Unity Catalog
Ao criar UDFs SQL, há algumas coisas que são incomuns comparadas com a maioria das consultas SQL:
- Utilize a sintaxe
RETURNem vez deAS $$. - Incorpore a configuração YAML num bloco de comentários SQL (
/* ... */). - Pode usar a
http_requestfunção para chamadas API.
CREATE OR REPLACE FUNCTION main.my_schema.send_slack_msg(
msg STRING,
channel STRING,
is_preview BOOLEAN
)
RETURNS STRING
RETURN (/*
schema: user-defined-operator-v0.1.0
type: uc-udf
name: Send Slack Message
id: send_msg
version: "1.0.0"
description: Send Slack Message to a Channel
config:
type: object
properties:
msg:
type: string
format: expression
title: Message
examples:
- "Select message column or expression"
x-ui:
widget: expression
port: input_data
channel:
type: string
title: Channel
is_preview:
type: boolean
format: is_preview
default: false
required:
- msg
- channel
additionalProperties: false
ports:
input:
- name: input_data
title: Input Data
output:
- name: output
title: Send Response Data
*/
CASE
WHEN NOT is_preview THEN
http_request(
conn => 'my_slack_connection',
method => 'POST',
path => 'chat.postMessage',
json => to_json(named_struct('channel', channel, 'text', msg)),
headers => map('Content-Type', 'application/json;charset=utf-8')
).text
ELSE 'Preview mode - no message sent to ' || channel
END
);
Esta função SQL inclui as seguintes funcionalidades:
| Feature | Purpose |
|---|---|
http_request() |
Faz chamadas HTTP para APIs externas. |
conn => 'my_slack_connection' |
Faz referência à ligação UC para autenticação. |
to_json() e named_struct() |
Constrói o payload JSON para a API do Slack. |
| Bloqueio de comentários YAML | Usado pelo Lakeflow Designer para criar o operador. |
CASE WHEN |
Implementa a lógica do modo de pré-visualização. |
Passo 4: Testar a função
Em seguida, teste a função para se certificar de que funciona antes de a registar como operador.
Teste primeiro em modo de pré-visualização, para evitar enviar uma mensagem no Slack:
-- Test in preview mode (won't send real message)
SELECT main.my_schema.send_slack_msg(
'Hello from Lakeflow Designer!',
'#test-channel',
true -- is_preview = true
) AS result;
-- Expected result: "Preview mode - no message sent to #test-channel"
Teste com chamada de API externa (envia uma mensagem para o Slack):
-- Test with real API call (USE WITH CAUTION!)
SELECT main.my_schema.send_slack_msg(
'Hello from Lakeflow Designer!',
'#test-channel',
false -- is_preview = false
) AS result;
-- Expected: Slack API response JSON
Passo 5: Registar o operador
Adicione o operador ao seu .user_defined_operators.yaml ficheiro:
operators:
- catalog: main
schema: my_schema
functionName: send_slack_msg
Note
Se definir este ficheiro na sua pasta de utilizador, ele só aparece para si. Para mais informações, consulte Tornar o seu operador descobrável.
Passo 6: Configurar permissões
Para UDFs SQL que utilizam ligações ao Unity Catalog, os utilizadores precisam de uma permissão adicional:
-- Schema and function access
GRANT USE SCHEMA ON SCHEMA main.my_schema TO `<user>`;
GRANT EXECUTE ON FUNCTION main.my_schema.send_slack_msg TO `<user>`;
-- Connection access (required for API calls)
GRANT USE CONNECTION ON CONNECTION my_slack_connection TO `<user>`;
Importante
Sem a USE CONNECTION permissão, os utilizadores não poderão fazer chamadas de API mesmo que consigam executar a função.
Utilize o operador no Lakeflow Designer
Depois de registado, o operador aparece no Lakeflow Designer com:
- Uma porta de entrada para ligar a sua fonte de dados.
- Um seletor de expressões para selecionar qual coluna contém o conteúdo da mensagem.
- Uma entrada de texto para o canal do Slack.
Os utilizadores podem enviar notificações com base nos seus dados. Por exemplo, alertar quando certos limiares são ultrapassados.
Casos de uso comuns
- Alertas: Envie notificações quando forem detetados problemas de qualidade dos dados.
- Notificações: Notifique as equipas quando os fluxos de trabalho terminarem.
- Webhooks: Permitem chamar APIs externas para acionar processos subsequentes.
- Registo: Envio de mensagens de auditoria para sistemas externos.
Boas práticas para construir operadores de chamada API
-
Utilize sempre o modo de pré-visualização: Adicione uma propriedade de configuração
is_previewcomformat: is_previewpara evitar chamadas acidentais à API. - Use ligações ao Unity Catalog: Nunca codifique credenciais fixas no seu UDF. As ligações do Catálogo Unity só estão disponíveis em UDFs SQL.
- Lidar com erros com elegância: as chamadas de API podem falhar; Considere o que devolver em caso de erro.
- Teste cuidadosamente: Use o modo de pré-visualização durante o desenvolvimento.
- Documente a configuração da ligação: Os utilizadores precisam de saber que ligação criar.