Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In deze zelfstudie maakt u een SQL UDF-operator voor Lakeflow Designer waarmee berichten worden geplaatst in Slack-kanalen. SQL UDF's zijn de juiste keuze wanneer een functie externe API's via HTTP moet aanroepen. Zie Door de gebruiker gedefinieerde operators in Lakeflow Designer voor een breder overzicht.
Overview
Deze operator verzendt berichten naar Slack met behulp van:
- SQL UDF: geschreven in SQL in plaats van Python.
- HTTP-verbinding met Unity Catalog: Slack API-referenties veilig beheren.
- Ondersteuning voor preview-modus: hiermee voorkomt u werkelijke Slack API-aanroepen tijdens de voorbeeldweergave van de werkstroom.
- Expressieparameters: Hiermee staat u dynamische berichtinhoud uit DataFrame-kolommen toe.
Waarom een SQL UDF gebruiken
Voor operators die externe API's moeten aanroepen (zoals Slack, REST-eindpunten, webhooks), moet u SQL UDF's gebruiken. Python UDF's en UDDF's kunnen geen HTTP-aanvragen indienen. SQL UDF's hebben toegang tot de http_request() functie die werkt met Unity Catalog-verbindingen.
Stap 1: De HTTP-verbinding voor De Unity Catalog instellen
Voordat u de UDF maakt, moet u een UNITY Catalog HTTP-verbinding instellen om uw Slack API-referenties veilig op te slaan. Vervang <xoxb-your-slack-bot-token> door je daadwerkelijke Slack Bot Token. U kunt dit verkrijgen via uw Slack-app-instellingen. U kunt dezelfde verbinding gebruiken voor meerdere UDF's. Zie Verbinding maken met externe HTTP-services voor meer informatie.
CREATE CONNECTION my_slack_connection TYPE HTTP OPTIONS (
host 'https://slack.com',
port '443',
base_path '/api/',
bearer_token '<xoxb-your-slack-bot-token>'
);
Stap 2: de YAML-operator maken
Maak nu de YAML voor de operator. Zie de YAML-referentie voor door de gebruiker gedefinieerde operator voor meer informatie over het schema.
De YAML voor deze operator omvat:
-
Expressieparameter (
msg): Maakt dynamische berichtinhoud uit dataframekolommen mogelijk. -
Tekenreeksparameter (
channel): Naam/id van statisch kanaal. -
Preview-modus (
is_preview): Een configuratie-eigenschap waarmeeformat: is_previewde preview-modus werkelijke API-aanroepen tijdens het testen kan voorkomen.
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
Dit omvat:
| Configuratiesleutel | Widget | Purpose |
|---|---|---|
msg |
expression |
Dynamische berichtinhoud van invoergegevens. |
channel |
input |
Slack-kanaal om naar te verzenden (bijvoorbeeld #alerts). |
is_preview |
n/a | Een Booleaanse configuratie-eigenschap met format: is_preview die functie stelt de operator in staat zich anders te gedragen tijdens een preview (in dit geval vermijd je het daadwerkelijk maken van een Slack-bericht). |
Stap 3: de unity-catalogusfunctie maken
Bij het maken van SQL UDF's zijn er enkele dingen die ongebruikelijk zijn vergeleken met de meeste SQL-query's:
- Gebruik de
RETURNsyntaxis in plaats vanAS $$. - Neem de YAML-configuratie op in een SQL-commentaarblok (
/* ... */). - Kan de
http_requestfunctie gebruiken voor API-aanroepen.
Het voorbeeld creëert de functie in main.example_output. Maak eerst het schema aan als het niet bestaat:
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: 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
);
Deze SQL-functie bevat de volgende functies:
| Feature | Purpose |
|---|---|
http_request() |
Maakt HTTP-aanroepen naar externe API's. |
conn => 'my_slack_connection' |
Verwijst naar de UC-verbinding voor verificatie. |
to_json() en named_struct() |
Hiermee wordt de JSON-nettolading voor de Slack-API samengesteld. |
| YAML-commentaarblok | Wordt gebruikt door Lakeflow Designer om de operator te maken. |
CASE WHEN |
Hiermee wordt preview-moduslogica geïmplementeerd. |
Stap 4: De functie testen
Test vervolgens de functie om te controleren of deze werkt voordat u deze registreert als operator.
Test eerst in de preview-modus zodat er geen bericht wordt verzonden. Het geeft Preview mode - no message sent to #test-channel terug.
SELECT main.example_output.send_slack_msg(
msg => 'Hello from Lakeflow Designer!',
channel => '#test-channel',
is_preview => true
) AS result;
Test met een echte API-aanroep om een bericht naar Slack te sturen. Gebruik dit voorzichtig: het plaatst een bericht in het kanaal en geeft de JSON-reactie van de Slack API terug.
SELECT main.example_output.send_slack_msg(
msg => 'Hello from Lakeflow Designer!',
channel => '#test-channel',
is_preview => false
) AS result;
Stap 5: De operator registreren
Voeg de operator toe aan uw .user_defined_operators.yaml bestand:
operators:
- catalog: main
schema: example_output
functionName: send_slack_msg
Note
Als u dit bestand in uw gebruikersmap definieert, wordt het alleen voor u weergegeven. Zie Uw operator detecteerbaar maken voor meer informatie.
Stap 6: Machtigingen instellen
Voor SQL UDF's die gebruikmaken van Unity Catalog-verbindingen hebben gebruikers een extra machtiging nodig:
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
Zonder de USE CONNECTION machtiging kunnen gebruikers geen API-aanroepen uitvoeren, zelfs niet als ze de functie kunnen uitvoeren.
Operator gebruiken in Lakeflow Designer
Nadat deze is geregistreerd, wordt de operator weergegeven in Lakeflow Designer met:
- Een invoerpoort om verbinding te maken met uw gegevensbron.
- Een expressiekiezer om te selecteren welke kolom de inhoud van het bericht bevat.
- Een tekstinvoer voor het Slack-kanaal.
Gebruikers kunnen meldingen verzenden op basis van hun gegevens. Bijvoorbeeld waarschuwingen wanneer bepaalde drempelwaarden worden overschreden.
Veelvoorkomende gebruiksvoorbeelden
- Waarschuwingen: meldingen verzenden wanneer problemen met de gegevenskwaliteit worden gedetecteerd.
- Meldingen: Stel teams op de hoogte wanneer de werkstromen zijn voltooid.
- Webhooks: externe API's aanroepen om downstreamprocessen te activeren.
- Logboekregistratie: Controleberichten verzenden naar externe systemen.
Praktische richtlijnen voor het ontwikkelen van operators die API's aanroepen
-
Altijd de preview-modus gebruiken: voeg een
is_previewconfiguratie-eigenschap toe omformat: is_previewonbedoelde API-aanroepen te voorkomen. - Gebruik Unity Catalog-verbindingen: codeer nooit referenties in uw UDF. Unity Catalog-verbindingen zijn alleen beschikbaar in SQL UDF's.
- Fouten probleemloos afhandelen: API-aanroepen kunnen mislukken; bedenk wat er moet worden geretourneerd bij een fout.
- Test grondig: Gebruik de preview-modus tijdens de ontwikkeling.
- Documenteer de verbindingsinstellingen: gebruikers moeten weten welke verbinding moet worden gemaakt.