Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
Dans ce tutoriel, vous allez créer un opérateur UDF SQL pour Lakeflow Designer qui publie des messages sur des canaux Slack. Pour un aperçu plus large, voir Opérateurs personnalisés dans Lakeflow Designer.
Vue d’ensemble
Cet opérateur envoie des messages à Slack à l’aide de :
- SQL UDF : écrit dans SQL plutôt que Python.
- Connexion HTTP du catalogue Unity : gère en toute sécurité les informations d’identification de l’API Slack.
- Prise en charge du mode préversion : empêche les appels réels de l’API Slack pendant la préversion du flux de travail.
- Paramètres d’expression : autorise le contenu de message dynamique à partir de colonnes DataFrame.
Pourquoi utiliser une fonction UDF SQL
Les UDF SQL peuvent appeler des API externes (comme Slack, les points de terminaison REST et les webhooks) avec cette http_request() fonction, qui s’authentifie via une connexion HTTP du catalogue Unity. La connexion stocke les identifiants, donc ils restent hors du code de fonction. Pour appeler une API depuis Python à la place, utilisez un python-run-function opérateur. Voir Tutoriel : opérateur d’expéditeur d’e-mail Gmail.
Requirements
- Accès à Lakeflow Designer dans un espace de travail compatible avec Unity Catalog. Voir Conditions préalables.
-
USE CATALOGsur lemaincatalog, etCREATE SCHEMAsurmain, ouUSE SCHEMAetCREATE FUNCTIONsur un schéma existantmain.example_output. Pour utiliser un catalogue ou un schéma différent, remplacezmain.example_outputpartout. Consultez les informations de référence sur les privilèges du catalogue Unity. -
CREATE CONNECTIONsur le métastore du catalogue Unity, pour créer la connexion HTTP. Consultez Se connecter aux services HTTP externes. - Une application Slack avec un jeton bot qui peut publier dans votre canal.
Étape 1 : Configurer la connexion HTTP du catalogue Unity
Avant de créer la fonction UDF, vous devez configurer une connexion HTTP du catalogue Unity pour stocker en toute sécurité vos informations d’identification d’API Slack. Remplacez <xoxb-your-slack-bot-token> par votre jeton de bot Slack réel. Vous pouvez l’obtenir à partir de vos paramètres d’application Slack. Vous pouvez utiliser cette même connexion dans plusieurs fonctions définies par l’utilisateur. Pour plus d’informations, consultez Se connecter aux services HTTP externes.
CREATE CONNECTION my_slack_connection TYPE HTTP OPTIONS (
host 'https://slack.com',
port '443',
base_path '/api/',
bearer_token '<xoxb-your-slack-bot-token>'
);
Étape 2 : Créer l’opérateur YAML
À présent, créez le YAML pour l’opérateur. Pour plus de détails sur le schéma, voir référence YAML de l’opérateur personnalisé.
Le YAML pour cet opérateur inclut :
-
Paramètre d’expression (
msg) : autorise le contenu de message dynamique à partir de colonnes de trame de données. -
Paramètre de chaîne (
channel) : nom/ID de canal statique. -
Mode préversion (
is_preview) : propriété de configuration avecformat: is_previewlaquelle permet le mode d’aperçu pour empêcher les appels d’API réels pendant le test.
schema: custom-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
x-ui:
widget: input
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
Cela inclut les éléments suivants :
| Clé de configuration | Widget | Purpose |
|---|---|---|
msg |
expression |
Contenu de message dynamique à partir de données d’entrée. |
channel |
input |
Canal Slack à envoyer (par exemple, #alerts). |
is_preview |
n/a | Une propriété de configuration booléenne avec format: is_preview, qui permet à l’opérateur de se comporter différemment lors d’une prévisualisation (dans ce cas, sans créer réellement de message Slack). |
Étape 3 : Créer la fonction Catalogue Unity
Lors de la création de fonctions SQL définies par l’utilisateur, certains aspects sont peu courants par rapport à la plupart des requêtes SQL :
- Utilisez la
RETURNsyntaxe au lieu deAS $$. - Incorporer la configuration YAML dans un bloc de commentaires SQL (
/* ... */). - Peut utiliser la fonction
http_requestpour effectuer des appels d’API.
L’exemple crée la fonction dans main.example_output. Créez d’abord le schéma s’il n’existe pas :
CREATE SCHEMA IF NOT EXISTS main.example_output
CREATE OR REPLACE FUNCTION main.example_output.send_slack_msg(
msg STRING,
channel STRING,
is_preview BOOLEAN
)
RETURNS STRING
RETURN (/*
schema: custom-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
x-ui:
widget: input
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
);
Cette fonction SQL inclut les fonctionnalités suivantes :
| Fonctionnalité | Purpose |
|---|---|
http_request() |
Effectue des appels HTTP aux API externes. |
conn => 'my_slack_connection' |
Fait référence à la connexion UC pour l’authentification. |
to_json() et named_struct() |
Construit la charge utile JSON pour l’API Slack. |
| Bloc de commentaires YAML | Utilisé par Lakeflow Designer pour créer l’opérateur. |
CASE WHEN |
Implémente la logique du mode d’aperçu. |
Étape 4 : Tester la fonction
Ensuite, testez la fonction pour vous assurer qu’elle fonctionne avant de l’inscrire en tant qu’opérateur.
Testez d’abord en mode aperçu pour qu’aucun message ne soit envoyé. Elle retourne Preview mode - no message sent to #test-channel.
SELECT main.example_output.send_slack_msg(
msg => 'Hello from Lakeflow Designer!',
channel => '#test-channel',
is_preview => true
) AS result;
Testez avec un appel API réel pour envoyer un message à Slack. Utilisez cela avec prudence : il publie sur le canal et renvoie le JSON de réponse de l’API Slack.
SELECT main.example_output.send_slack_msg(
msg => 'Hello from Lakeflow Designer!',
channel => '#test-channel',
is_preview => false
) AS result;
Étape 5 : Inscrire l’opérateur
Ajoutez l’opérateur au fichier .custom_operators.yaml :
operators:
- catalog: main
schema: example_output
functionName: send_slack_msg
Note
Si vous définissez ce fichier dans votre dossier utilisateur, il s’affiche uniquement pour vous. Pour plus d’informations, consultez Inscrire et déployer votre opérateur chez Lakeflow Designer.
Étape 6 : Configurer les autorisations
Pour les fonctions SQL définies par l’utilisateur qui utilisent des connexions Unity Catalog, les utilisateurs ont besoin d’une autorisation supplémentaire :
GRANT USE SCHEMA ON SCHEMA main.example_output TO `<user>`;
GRANT EXECUTE ON FUNCTION main.example_output.send_slack_msg TO `<user>`;
GRANT USE CONNECTION ON CONNECTION my_slack_connection TO `<user>`;
Important
Sans autorisation USE CONNECTION , les utilisateurs ne pourront pas effectuer d’appels d’API même s’ils peuvent exécuter la fonction.
Étape 7 : Utilisez l’opérateur dans Lakeflow Designer
- Dans une préparation visuelle des données, ouvrez le menu Opérateurs dans le panneau de gauche et trouvez l’opérateur Envoyer un message Slack.
- Faites glisser l’opérateur sur la toile et y connectez une entrée.
- Double-cliquez sur l’opérateur pour ouvrir son panneau de configuration, puis définissez ses champs.
- Sélectionnez l’opérateur pour prévisualiser ses résultats dans le panneau de sortie.
L’opérateur a :
- Port d’entrée pour connecter votre source de données.
- Sélecteur d’expressions pour sélectionner la colonne qui contient le contenu du message.
- Entrée de texte pour le canal Slack.
Les utilisateurs peuvent envoyer des notifications en fonction de leurs données. Par exemple, l’alerte lorsque certains seuils sont dépassés.
Conseils et bonnes pratiques
Utilisez les exemples et directives suivants lorsque vous construisez des opérateurs qui appellent des API externes.
Cas d’usage courants
- Alertes : envoyer des notifications lorsque des problèmes de qualité des données sont détectés.
- Notifications : informez les équipes lorsque les flux de travail sont terminés.
- Webhooks : appelez des API externes pour déclencher des processus en aval.
- Journalisation : envoyer des messages d’audit à des systèmes externes.
Meilleures pratiques pour la création d’opérateurs d’appel d’API
-
Utilisez toujours le mode d’aperçu : ajoutez une
is_previewpropriété de configuration avecformat: is_previewpour empêcher les appels d’API accidentels. -
Utilisez les connexions du catalogue Unity : ne jamais coder en dur les informations d’identification dans votre UDF. Stockez-les dans une connexion HTTP Unity Catalog et appelez-la avec
http_request(). - Gérer correctement les erreurs : les appels d’API peuvent échouer ; considérez ce qu’il faut retourner en cas d’erreur.
- Testez soigneusement : utilisez le mode d’aperçu pendant le développement.
- Documentez la configuration de la connexion : les utilisateurs doivent savoir quelle connexion créer.