Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Important
Esta característica está en versión preliminar pública.
En este tutorial, creará un operador UDF de SQL para Lakeflow Designer que publica mensajes en canales de Slack. Las UDF de SQL son la opción correcta cuando una función necesita llamar a api externas a través de HTTP. Para obtener información general más amplia, consulte Operadores definidos por el usuario en Lakeflow Designer.
Información general
Este operador envía mensajes a Slack mediante:
- SQL UDF: escrito en SQL en lugar de Python.
- Conexión HTTP del catálogo de Unity: administra de forma segura las credenciales de la API de Slack.
- Compatibilidad con el modo de vista previa: impide las llamadas reales de la API de Slack durante la versión preliminar del flujo de trabajo.
- Parámetros de expresión: permite el contenido dinámico del mensaje de las columnas DataFrame.
¿Por qué SQL UDF?
Para los operadores que necesiten llamar a APIs externas (como Slack, extremos REST o webhooks), deben usar UDF de SQL. Las UDF y las UDTF de Python no pueden hacer solicitudes HTTP. Las UDF de SQL tienen acceso a la función http_request(), que funciona con las conexiones de Unity Catalog.
Paso 1: Configurar la conexión HTTP del catálogo de Unity
Antes de crear la UDF, debe configurar una conexión HTTP del catálogo de Unity para almacenar de forma segura las credenciales de la API de Slack. Reemplace <xoxb-your-slack-bot-token> por el token real de su bot de Slack. Puede obtener esto en la configuración de la aplicación slack. Puede usar esta misma conexión en múltiples UDF. Para más información, consulte Conexión a servicios 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>'
);
Paso 2: Creación del operador YAML
Ahora creará el código YAML para el operador . Para obtener más información sobre el esquema, consulte Referencia de YAML del operador definido por el usuario.
YaML para este operador incluye:
-
Parámetro de expresión (
msg): permite el contenido dinámico de mensajes de columnas de trama de datos. -
Parámetro de cadena (
channel): nombre o identificador del canal estático. -
Modo de vista previa (
is_preview): propiedad config conformat: is_previewque permite el modo de vista previa evitar llamadas API reales durante las pruebas.
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
Esto incluye lo siguiente:
| Clave de configuración | Widget | propósito |
|---|---|---|
msg |
expression |
Contenido dinámico del mensaje a partir de los datos de entrada. |
channel |
text |
Canal de Slack al que se va a enviar (por ejemplo, #alerts). |
is_preview |
n/a | Una propiedad de configuración booleana con format: is_preview que permite al operador comportarse de forma diferente durante una versión preliminar (en este caso, evite realmente crear un mensaje de Slack). |
Paso 3: Crear la función catálogo de Unity
Al crear UDF de SQL, hay algunas cosas que son poco frecuentes en comparación con la mayoría de las consultas SQL:
- Use la
RETURNsintaxis en lugar deAS $$. - Inserte la configuración de YAML en un bloque de comentarios de SQL (
/* ... */). - Puede usar la
http_requestfunción para las llamadas 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 función SQL incluye las siguientes características:
| Feature | propósito |
|---|---|
http_request() |
Realiza llamadas HTTP a api externas. |
conn => 'my_slack_connection' |
Hace referencia a la conexión UC para la autenticación. |
to_json() y named_struct() |
Construye la carga JSON para la API de Slack. |
| Bloque de comentarios de YAML | Lo usa Lakeflow Designer para crear el operador . |
CASE WHEN |
Implementa la lógica del modo de vista previa. |
Paso 4: Probar la función
A continuación, pruebe la función para asegurarse de que funciona antes de registrarla como operador.
Pruebe primero en modo de vista previa para evitar enviar un mensaje de 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"
Pruebe con una llamada API externa (enviará un mensaje a 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
Paso 5: Registrar el operador
Añada el operador a su archivo .user_defined_operators.yaml:
operators:
- catalog: main
schema: my_schema
functionName: send_slack_msg
Note
Si define este archivo en la carpeta de usuario, solo aparece para usted. Para obtener más información, consulte Hacer que el operador sea reconocible.
Paso 6: Configuración de permisos
Para las UDF de SQL que usan conexiones de Catálogo de Unity, los usuarios necesitan un permiso 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>`;
Important
Sin el USE CONNECTION permiso, los usuarios no podrán realizar llamadas API aunque puedan ejecutar la función.
Usar el operador en Lakeflow Designer
Una vez registrado, el operador aparecerá en Lakeflow Designer con:
- Un puerto de entrada para conectar el origen de datos.
- Selector de expresiones para seleccionar qué columna contiene el contenido del mensaje.
- Entrada de texto para el canal de Slack.
Los usuarios pueden enviar notificaciones en función de sus datos, por ejemplo, alertando cuando se superan determinados umbrales.
Casos de uso comunes
- Alertas : envíe notificaciones cuando se detecten problemas de calidad de datos.
- Notificaciones : notifique a los equipos cuando se completen los flujos de trabajo.
- Webhooks — Llamar a API externas para activar procesos posteriores.
- Registro : enviar mensajes de auditoría a sistemas externos.
Procedimientos recomendados para compilar operadores de llamadas API
-
Usar siempre el modo de vista previa : agregue una
is_previewpropiedad config conformat: is_previewpara evitar llamadas API accidentales. - Usar conexiones de Unity Catalog — Nunca codificar las credenciales directamente en la UDF. Las conexiones del catálogo de Unity solo están disponibles en UDF de SQL.
- Gestione los errores de forma adecuada — las llamadas a la API pueden fallar; considere qué devolver en caso de error.
- Prueba exhaustiva: use el modo de vista previa durante el desarrollo.
- Documente la configuración de la conexión : los usuarios deben saber qué conexión crear.