Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto kurzu vytvoříte operátor UDF SQL pro Návrhář Lakeflow, který publikuje zprávy do kanálů Slack. Funkce SQL UDF je správnou volbou, když funkce potřebuje volat externí rozhraní API přes protokol HTTP. Širší přehled najdete v tématu Uživatelem definované operátory v Návrháři Lakeflow.
Overview
Tento operátor odesílá zprávy do Slacku pomocí:
- SQL UDF: Místo Python se píše v SQL.
- Připojení HTTP v Unity Catalog: Bezpečně spravuje přihlašovací údaje k rozhraní API Slacku.
- Podpora režimu náhledu: Zabraňuje skutečným voláním rozhraní Slack API během náhledu pracovního postupu.
- Parametry výrazu: Umožňuje dynamický obsah zpráv ze sloupců datového rámce.
Proč používat uživatelsky definovanou funkci SQL
Pro operátory, které potřebují volat externí rozhraní API (například Slack, koncové body REST, webhooky), musíte použít UDF SQL. Uživatelsky definované funkce (UDF) a uživatelsky definované tabulkové funkce (UDTF) v Pythonu nemohou odesílat požadavky HTTP. Funkce SQL UDF mají přístup k funkci http_request(), která funguje s připojeními Unity Catalogu.
Krok 1: Nastavení připojení HTTP katalogu Unity
Před vytvořením UDF musíte nastavit připojení HTTP katalogu Unity pro bezpečné uložení přihlašovacích údajů rozhraní Slack API. Nahraďte <xoxb-your-slack-bot-token> skutečným tokenem robota Slack. Můžete to získat z nastavení aplikace Slack. Toto stejné připojení můžete použít napříč více funkcemi definovanými uživatelem. Další informace najdete v tématu Připojení k externím službám HTTP.
-- 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>'
);
Krok 2: Vytvoření operátoru YAML
Teď vytvořte YAML pro operátor. Podrobnosti o schématu naleznete v tématu Uživatelem definovaný operátor YAML reference.
YAML pro tento operátor zahrnuje:
-
Parametr výrazu (
msg): Umožňuje dynamický obsah zpráv ze sloupců datového rámce. -
Řetězcový parametr (
channel): Název nebo ID statického kanálu -
Režim náhledu (
is_preview): Vlastnost konfigurace, kteráformat: is_previewumožňuje režim náhledu, aby se zabránilo skutečným voláním rozhraní API během testování.
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
Sem patří:
| Konfigurační klíč | Widget | Purpose |
|---|---|---|
msg |
expression |
Dynamický obsah zprávy ze vstupních dat |
channel |
input |
Kanál Slack, do kterého se má odesílat (např. #alerts). |
is_preview |
není k dispozici | Booleovská konfigurační vlastnost s format: is_preview, která umožňuje operátoru chovat se v režimu náhledu odlišně (v tomto případě se skutečně nevytvoří zpráva ve Slacku). |
Krok 3: Vytvoření funkce Katalogu Unity
Při vytváření UDF SQL existuje několik věcí, které jsou ve srovnání s většinou dotazů SQL neobvyklé:
- Použijte syntaxi
RETURNmístoAS $$. - Vložte konfiguraci YAML do bloku komentáře SQL (
/* ... */). - Může použít
http_requestfunkci pro volání rozhraní 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
);
Tato funkce SQL obsahuje následující funkce:
| funkce | Purpose |
|---|---|
http_request() |
Provádí volání HTTP do externích rozhraní API. |
conn => 'my_slack_connection' |
Odkazuje na připojení UC pro ověřování. |
to_json() a named_struct() |
Vytvoří datový obsah JSON pro API Slacku. |
| Blok komentáře YAML | Používá návrhář Lakeflow k vytvoření operátoru. |
CASE WHEN |
Implementuje logiku režimu náhledu. |
Krok 4: Testování funkce
Dále otestujte funkci, abyste se ujistili, že funguje, než ji zaregistrujete jako operátor.
Nejprve otestujte v režimu náhledu, abyste se vyhnuli odesílání zprávy 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"
Testování pomocí volání externího rozhraní API (odešle zprávu do Slacku):
-- 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
Krok 5: Registrace operátoru
Přidejte operátor do souboru .user_defined_operators.yaml:
operators:
- catalog: main
schema: my_schema
functionName: send_slack_msg
Note
Pokud tento soubor definujete ve složce uživatele, zobrazí se vám jenom za vás. Další informace najdete v článku Jak zajistit, aby byl váš operátor dohledatelný.
Krok 6: Nastavení oprávnění
Pro uživatele uživatelsky definovaných funkcí SQL, které využívají připojení služby Unity Catalog, je vyžadováno další oprávnění:
-- 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
USE CONNECTION Bez oprávnění uživatelé nebudou moct provádět volání rozhraní API, i když můžou funkci spustit.
Použití operátoru v nástroji Lakeflow Designer
Po registraci se operátor zobrazí v Návrháři Lakeflow s následujícími informacemi:
- Vstupní port pro připojení zdroje dat.
- Nástroj pro výběr výrazu k určení, který sloupec obsahuje text zprávy.
- Textový vstup pro kanál Slack.
Uživatelé můžou posílat oznámení na základě jejich dat. Například upozorňování při překročení určitých prahových hodnot.
Běžné případy použití
- Upozornění: Odesílání oznámení při zjištění problémů s kvalitou dat
- Oznámení: Upozorněte týmy na dokončení pracovních postupů.
- Webhooky: Volání externích rozhraní API pro aktivaci podřízených procesů
- Protokolování: Odesílejte zprávy auditu do externích systémů.
Osvědčené postupy pro vytváření operátorů volání rozhraní API
-
Vždy používejte režim náhledu: Přidejte
is_previewvlastnost konfigurace sformat: is_previewcílem zabránit náhodným voláním rozhraní API. - Používejte připojení katalogu Unity: Nikdy ve vašem UDF nezakódujte přihlašovací údaje. Připojení katalogu Unity jsou k dispozici pouze v uživatelem definovaných funkcích SQL.
- Elegantní zpracování chyb: Volání API mohou selhat; zvažte, co vracet v případě chyby.
- Důkladně otestujte: Během vývoje používejte režim náhledu.
- Zdokumentujte nastavení připojení: Uživatelé musí vědět, jaké připojení se má vytvořit.