Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu öğreticide, Slack kanallarına ileti göndererek Lakeflow Designer için bir SQL UDF işleci oluşturacaksınız. SQL UDF'leri, bir işlevin HTTP üzerinden dış API'leri çağırması gerektiğinde doğru seçimdir. Daha geniş bir genel bakış için bkz. Lakeflow Designer'da kullanıcı tanımlı işleçler.
Overview
Bu işleç, slack'e şu komutu kullanarak ileti gönderir:
- SQL UDF: Python yerine SQL'de yazılır.
- Unity Kataloğu HTTP bağlantısı: Slack API kimlik bilgilerini güvenli bir şekilde yönetir.
- Önizleme modu desteği: İş akışı önizlemesi sırasında gerçek Slack API çağrılarını engeller.
- İfade parametreleri: DataFrame sütunlarından dinamik ileti içeriğine izin verir.
Sql UDF neden kullanılır?
Dış API'leri çağırması gereken işleçler için (Slack, REST uç noktaları, web kancaları gibi), SQL UDF'lerini kullanmanız gerekir. Python UDF'ler ve UDTF'ler HTTP isteği gönderemez. SQL UDF'leri, Unity Catalog bağlantılarıyla çalışan http_request() işlevine erişebilir.
1. Adım: Unity Kataloğu HTTP bağlantısını ayarlama
UDF'yi oluşturmadan önce Slack API kimlik bilgilerinizi güvenli bir şekilde depolamak için bir Unity Kataloğu HTTP bağlantısı ayarlamanız gerekir.
<xoxb-your-slack-bot-token> öğesini gerçek Slack Bot Token’ınızla değiştirin. Bunu Slack uygulama ayarlarınızdan alabilirsiniz. Aynı bağlantıyı birden çok UDF arasında kullanabilirsiniz. Daha fazla bilgi edinmek için bkz. Dış HTTP hizmetlerine bağlanma.
-- 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>'
);
2. Adım: YAML işlecini oluşturma
Şimdi işleci için YAML'yi oluşturun. Şema hakkında ayrıntılı bilgi için bkz. Kullanıcı tanımlı işleç YAML başvurusu.
Bu işleç için YAML şunları içerir:
-
İfade parametresi (
msg): Veri çerçevesi sütunlarından dinamik ileti içeriğine izin verir. -
Dize parametresi (
channel): Statik kanal adı/kimliği. -
Önizleme modu (
is_preview): Önizleme modunun test sırasında gerçek API çağrılarını engellemesini sağlayan ileformat: is_previewbir yapılandırma özelliği.
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
Buna aşağıdakiler dahildir:
| Yapılandırma Anahtarı | Widget | Purpose |
|---|---|---|
msg |
expression |
Giriş verilerinden dinamik ileti içeriği. |
channel |
input |
Gönderim yapılacak Slack kanalı (örn. #alerts). |
is_preview |
Yok |
format: is_preview içeren, operatörün önizleme sırasında farklı davranmasına olanak tanıyan bir boole yapılandırma özelliği (bu durumda, gerçekte bir Slack iletisi oluşturmaktan kaçınmak). |
3. Adım: Unity Kataloğu işlevini oluşturma
SQL UDF'leri oluştururken, sql sorgularının çoğuna kıyasla nadir olan birkaç şey vardır:
-
RETURNyerineAS $$söz dizimini kullanın. - YAML yapılandırmasını bir SQL açıklama bloğuna (
/* ... */) ekleyin. - API çağrıları için
http_requestişlevi kullanılabilir.
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
);
Bu SQL işlevi aşağıdaki özellikleri içerir:
| Özellik | Purpose |
|---|---|
http_request() |
Dış API'lere HTTP çağrıları yapar. |
conn => 'my_slack_connection' |
Kimlik doğrulaması için UC bağlantısına başvurur. |
to_json() ve named_struct() |
Slack API'si için JSON yükünü oluşturur. |
| YAML açıklama bloğu | Lakeflow Designer tarafından işleci oluşturmak için kullanılır. |
CASE WHEN |
Önizleme modu mantığı uygular. |
4. Adım: İşlevi test edin
Ardından, işlevi işleç olarak kaydetmeden önce çalıştığından emin olmak için test edin.
Slack iletisi göndermekten kaçınmak için önce önizleme modunda test edin:
-- 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"
Dış API çağrısıyla test etme (Slack'e bir ileti gönderir):
-- 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
5. Adım: İşleci kaydetme
İşleci .user_defined_operators.yaml dosyanıza ekleyin:
operators:
- catalog: main
schema: my_schema
functionName: send_slack_msg
Note
Bu dosyayı kullanıcı klasörünüzde tanımlarsanız, yalnızca sizin için görünür. Daha fazla bilgi için bkz. Operatörünüzü bulunabilir hale getirme.
6. Adım: İzinleri ayarlama
Unity Kataloğu bağlantılarını kullanan SQL UDF'leri için kullanıcıların ek bir izne sahip olması gerekir:
-- 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 İzin olmadan, kullanıcılar işlevi yürütseler bile API çağrıları yapamazlar.
Lakeflow Designer'da operatörü kullanın
İşleç kaydedildikten sonra Lakeflow Designer'da şu şekilde görünür:
- Veri kaynağınızı bağlamak için bir giriş bağlantı noktası.
- İleti içeriğini içeren sütunu seçmek için bir ifade seçici.
- Slack kanalı için bir metin girişi.
Kullanıcılar verilerine göre bildirim gönderebilir. Örneğin, belirli eşikler aşıldığında uyarır.
Yaygın kullanım örnekleri
- Uyarılar: Veri kalitesi sorunları algılandığında bildirim gönderin.
- Bildirimler: İş akışları tamamlandığında ekiplere bildirme.
- Web Kancaları: Aşağı akış işlemlerini tetikleme amacıyla dış API'leri çağır.
- Günlükleme: Denetim mesajlarını dış sistemlere gönderir.
API çağırma işleçleri oluşturmaya yönelik en iyi yöntemler
-
Her zaman önizleme modunu kullan: Yanlışlıkla YAPıLAN API çağrılarını önlemek için ile
is_previewbirformat: is_previewyapılandırma özelliği ekleyin. - Unity Kataloğu bağlantılarını kullanma: UDF'nizde kimlik bilgilerini hiçbir zaman sabit kodlamayın. Unity Kataloğu bağlantıları yalnızca SQL UDF'lerinde kullanılabilir.
- Hataları düzgün bir şekilde işleme: API çağrıları başarısız olabilir; hatanın ne döndüreceği konusunda düşünün.
- Kapsamlı bir şekilde test edin: Geliştirme sırasında önizleme modunu kullanın.
- Bağlantı kurulumunu belgele: Kullanıcıların hangi bağlantının oluşturulacağını bilmesi gerekir.