Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Dalam tutorial ini, Anda membuat operator UDF SQL untuk Lakeflow Designer yang memposting pesan ke saluran Slack. UDF SQL adalah pilihan yang tepat ketika fungsi perlu memanggil API eksternal melalui HTTP. Untuk gambaran umum yang lebih luas, lihat Operator yang ditentukan pengguna di Lakeflow Designer.
Ikhtisar
Operator ini mengirim pesan ke Slack menggunakan:
- SQL UDF: Ditulis dalam SQL daripada Python.
- Koneksi HTTP Katalog Unity: Mengelola kredensial Slack API dengan aman.
- Dukungan mode pratinjau: Mencegah panggilan API Slack aktual selama pratinjau alur kerja.
- Parameter ekspresi: Memungkinkan konten pesan dinamis dari kolom DataFrame.
Mengapa menggunakan SQL UDF
Untuk operator yang perlu memanggil API eksternal (seperti Slack, titik akhir REST, webhook), Anda harus menggunakan UDF SQL. Python UDF dan UDTF tidak dapat membuat permintaan HTTP. SQL UDF memiliki akses ke fungsi http_request() yang berfungsi dengan koneksi Unity Catalog.
Langkah 1: Siapkan koneksi HTTP Katalog Unity
Sebelum membuat UDF, Anda perlu menyiapkan koneksi HTTP Unity Catalog untuk menyimpan kredensial API Slack Anda dengan aman. Ganti <xoxb-your-slack-bot-token> dengan Token Bot Slack Anda yang sebenarnya. Anda bisa mendapatkan ini dari pengaturan aplikasi Slack Anda. Anda dapat menggunakan koneksi yang sama ini di beberapa UDF. Untuk mempelajari selengkapnya, lihat Menyambungkan ke layanan HTTP eksternal.
-- 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>'
);
Langkah 2: Membuat YAML operator
Sekarang, buat YAML untuk operator. Untuk detail tentang skema, lihat Referensi YAML operator yang ditentukan pengguna.
YAML untuk operator ini meliputi:
-
Parameter ekspresi (
msg): Memungkinkan konten pesan dinamis dari kolom dataframe. -
Parameter string (
channel): Nama/ID saluran statis. -
Mode pratinjau (
is_preview): Properti konfigurasi denganformat: is_previewyang memungkinkan mode pratinjau untuk mencegah panggilan API aktual selama pengujian.
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
Hal ini mencakup:
| Kunci Konfigurasi | Widget | Kegunaan |
|---|---|---|
msg |
expression |
Konten pesan dinamis dari data masukan. |
channel |
input |
Saluran Slack tujuan pengiriman (misalnya, #alerts). |
is_preview |
n/a | Properti konfigurasi boolean dengan format: is_preview yang memungkinkan operator berperilaku berbeda selama pratinjau (dalam hal ini, hindari benar-benar membuat pesan Slack). |
Langkah 3: Membuat fungsi Katalog Unity
Saat membuat UDF SQL, ada beberapa hal yang jarang dibandingkan dengan sebagian besar kueri SQL:
- Gunakan sintaks
RETURNalih-alihAS $$. - Sematkan konfigurasi YAML di blok komentar SQL (
/* ... */). - Dapat menggunakan
http_requestfungsi untuk panggilan 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
);
Fungsi SQL ini mencakup fitur-fitur berikut:
| Feature | Kegunaan |
|---|---|
http_request() |
Melakukan panggilan HTTP ke API eksternal. |
conn => 'my_slack_connection' |
Mereferensikan koneksi UC untuk autentikasi. |
to_json() dan named_struct() |
Membuat payload JSON untuk API Slack. |
| Blok komentar YAML | Digunakan oleh Lakeflow Designer untuk membuat operator. |
CASE WHEN |
Menerapkan logika mode pratinjau. |
Langkah 4: Uji fungsi
Selanjutnya, uji fungsi untuk memastikan fungsi berfungsi sebelum mendaftarkannya sebagai operator.
Uji dalam mode pratinjau terlebih dahulu, untuk menghindari pengiriman pesan 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"
Uji dengan panggilan API eksternal (mengirim pesan ke 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
Langkah 5: Daftarkan operator
Tambahkan operator ke file .user_defined_operators.yaml Anda:
operators:
- catalog: main
schema: my_schema
functionName: send_slack_msg
Note
Jika Anda menentukan file ini di folder pengguna Anda, file tersebut hanya muncul untuk Anda. Untuk informasi selengkapnya, lihat Membuat operator Anda dapat ditemukan.
Langkah 6: Menyiapkan izin
Untuk UDF SQL yang menggunakan koneksi Katalog Unity, pengguna memerlukan izin tambahan:
-- 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 Tanpa izin, pengguna tidak akan dapat melakukan panggilan API bahkan jika mereka dapat menjalankan fungsi.
Menggunakan operator di Lakeflow Designer
Setelah terdaftar, operator muncul di Lakeflow Designer dengan:
- Port input untuk menyambungkan sumber data Anda.
- Pemilih ekspresi untuk memilih kolom mana yang berisi konten pesan.
- Input teks untuk saluran Slack.
Pengguna dapat mengirim pemberitahuan berdasarkan data mereka. Misalnya, memperingatkan ketika ambang batas tertentu terlampaui.
Kasus penggunaan umum
- Pemberitahuan: Kirim pemberitahuan saat masalah kualitas data terdeteksi.
- Pemberitahuan: Memberi tahu tim saat alur kerja selesai.
- Webhook: Panggil API eksternal untuk memicu proses hilir.
- Pencatatan log: Kirim pesan audit ke sistem eksternal.
Praktik terbaik untuk membangun operator panggilan API
-
Selalu gunakan mode pratinjau: Tambahkan
is_previewproperti konfigurasi denganformat: is_previewuntuk mencegah panggilan API yang tidak disengaja. - Gunakan koneksi Katalog Unity: Jangan pernah mengodekan kredensial hardcode di UDF Anda. Koneksi Unity Catalog hanya tersedia di SQL UDF.
- Tangani error dengan baik: Panggilan API dapat gagal; pertimbangkan apa yang harus dikembalikan jika terjadi error.
- Uji secara menyeluruh: Gunakan mode pratinjau selama pengembangan.
- Dokumentasikan penyiapan koneksi: Pengguna perlu mengetahui koneksi apa yang akan dibuat.