Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Importante
Esse recurso está em Visualização Pública.
Neste tutorial, você criará um operador UDF do SQL para o Lakeflow Designer que posta mensagens nos canais do Slack. UDFs do SQL são a escolha certa quando uma função precisa chamar APIs externas por HTTP. Para obter uma visão geral mais ampla, consulte operadores definidos pelo usuário no Lakeflow Designer.
Visão geral
Esse operador envia mensagens para o Slack usando:
- SQL UDF: escrito em SQL em vez de Python.
- Conexão HTTP do Unity Catalog: gerencia com segurança as credenciais da API do Slack.
- Suporte ao modo de visualização: impede chamadas reais da API do Slack durante a visualização do fluxo de trabalho.
- Parâmetros de expressão: Permitem inserir conteúdo dinâmico em mensagens a partir de colunas do DataFrame.
Por que usar SQL UDF?
Para os operadores que precisam fazer chamadas a APIs externas (como Slack, endpoints REST e webhooks), é necessário usar UDFs SQL. Python UDFs e UDTFs não podem fazer solicitações HTTP. As UDFs SQL têm acesso à função http_request(), que funciona com conexões do Unity Catalog.
Etapa 1: Configurar a conexão HTTP do Catálogo do Unity
Antes de criar o UDF, você precisa configurar uma conexão HTTP do Catálogo do Unity para armazenar com segurança suas credenciais de API do Slack. Substitua <xoxb-your-slack-bot-token> pelo token de bot do Slack real. Você pode obter isso nas configurações do aplicativo Slack. Você pode usar essa mesma conexão em vários UDFs. Para saber mais, confira Conectar-se 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>'
);
Etapa 2: Criar o operador YAML
Agora você criará o YAML para o operador. Para obter detalhes sobre o esquema, consulte a referência YAML do operador definido pelo usuário.
O YAML para este operador inclui:
-
Parâmetro de expressão (
msg): permite conteúdo dinâmico de mensagens a partir de colunas do dataframe. -
Parâmetro de cadeia de caracteres (
channel): nome/ID do canal estático. -
Modo de visualização (
is_preview): uma propriedade de configuração comformat: is_previewque permite o modo de visualização para impedir chamadas de API reais durante o teste.
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
Isso inclui:
| Chave de configuração | Widget | Purpose |
|---|---|---|
msg |
expression |
Conteúdo dinâmico da mensagem a partir de dados de entrada. |
channel |
text |
Canal do Slack para o qual enviar (por exemplo, #alerts). |
is_preview |
n/a | Uma propriedade de configuração booleana com format: is_preview que permite que o operador se comporte de forma diferente durante uma pré-visualização (neste caso, evitar criar de fato uma mensagem no Slack). |
Etapa 3: Criar a função catálogo do Unity
Ao criar UDFs do SQL, há algumas coisas incomuns em comparação com a maioria das consultas SQL:
- Use a sintaxe
RETURNem vez deAS $$. - Insira a configuração do YAML em um 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
);
Essa função SQL inclui os seguintes recursos:
| Característica | Purpose |
|---|---|
http_request() |
Faz chamadas HTTP para APIs externas. |
conn => 'my_slack_connection' |
Faz referência à conexão UC para autenticação. |
to_json() e named_struct() |
Constrói o conteúdo JSON para a API do Slack. |
| Bloco de comentários YAML | Usado pelo Lakeflow Designer para criar o operador. |
CASE WHEN |
Implementa a lógica do modo de visualização. |
Etapa 4: Testar a função
Em seguida, teste a função para verificar se ela funciona antes de registrá-la como um operador.
Teste primeiro no modo de visualização para evitar o envio de uma mensagem do 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 a chamada à API externa (enviará uma mensagem ao 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
Etapa 5: Registrar o operador
Adicione o operador ao seu .user_defined_operators.yaml arquivo:
operators:
- catalog: main
schema: my_schema
functionName: send_slack_msg
Note
Se você definir esse arquivo em sua pasta de usuário, ele será exibido apenas para você. Para obter mais informações, consulte Tornar seu operador detectável.
Etapa 6: Configurar permissões
Para UDFs SQL que usam conexões do Unity Catalog, os usuários 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 usuários não poderão fazer chamadas à API mesmo que possam executar a função.
Usando o operador no Lakeflow Designer
Depois de registrado, o operador aparecerá no Lakeflow Designer com:
- Uma porta de entrada para conectar sua fonte de dados.
- Um seletor de expressão para selecionar qual coluna contém o conteúdo da mensagem.
- Uma entrada de texto para o canal do Slack.
Os usuários podem enviar notificações com base em seus dados , por exemplo, alertando quando determinados limites são excedidos.
Casos de uso comuns
- Alertas – Enviar notificações quando forem detectados problemas de qualidade de dados.
- Notificações – Notifique as equipes quando os fluxos de trabalho forem concluídos.
- Webhooks — chame APIs externas para disparar processos downstream.
- Registro — Enviar mensagens de auditoria para sistemas externos.
Práticas recomendadas para a criação de operadores de chamada de API
-
Sempre use o modo de pré-visualização — Adicione uma propriedade de configuração
is_previewcomformat: is_previewpara evitar chamadas acidentais de API. - Usar conexões do Catálogo do Unity – Nunca codificar credenciais em seu UDF. As conexões do Catálogo do Unity só estão disponíveis em UDFs do SQL.
- Trate os erros adequadamente — as chamadas de API podem falhar; considere o que retornar em caso de erro.
- Teste minuciosamente – use o modo de visualização durante o desenvolvimento.
- Documente a configuração da conexão – os usuários precisam saber qual conexão criar.