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. 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?
SQL UDF'ler, Unity Catalog HTTP bağlantısı üzerinden kimlik doğrulaması yapan http_request() işleviyle harici API'leri (örneğin Slack, REST uç noktaları ve webhook'lar) çağırabilir. Bağlantı kimlik bilgilerini saklar, böylece fonksiyon kodundan uzak kalıyorlar. Bunun yerine, Python'dan bir API çağırmak için bir python-run-function operatör kullanın.
Öğretici: Gmail e-posta gönderici operatörü'ne bakın.
Requirements
- Unity Kataloğu özellikli bir çalışma alanında Lakeflow Designer'a erişim. Bkz. Önkoşullar.
-
USE CATALOGmainkatalogda,CREATE SCHEMAmainüzerinde veyaUSE SCHEMAveCREATE FUNCTIONmevcut birmain.example_outputşeması üzerinde. Farklı bir katalog veya şema kullanmak için,main.example_outputifadesini her yerde değiştirin. Bkz Unity Kataloğu ayrıcalıkları referansı. -
CREATE CONNECTIONUnity Kataloğu metastore'unda HTTP bağlantısını oluşturmak için. Bkz. Dış HTTP hizmetlerine bağlanma. - Kanalınıza ileti gönderebilen bir bot tokenına sahip Slack uygulaması.
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 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
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
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ını sağlayan Boole türünde bir yapılandırma özelliği (bu durumda, gerçekten bir Slack mesajı oluşturmaktan kaçınmasını sağlar). |
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.
Örnek, işlevi main.example_output içinde oluşturur. Eğer şema yoksa, önce onu oluşturun:
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
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
);
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.
Önce önizleme modunda test et, böylece mesaj gönderilmez. Bu Preview mode - no message sent to #test-channel döndürür.
SELECT main.example_output.send_slack_msg(
msg => 'Hello from Lakeflow Designer!',
channel => '#test-channel',
is_preview => true
) AS result;
Slack'e mesaj göndermek için gerçek bir API çağrısıyla test edin. Bunu dikkatli kullanın: kanala gönderi gönderiyor ve Slack API yanıtını JSON döndürüyor.
SELECT main.example_output.send_slack_msg(
msg => 'Hello from Lakeflow Designer!',
channel => '#test-channel',
is_preview => false
) AS result;
5. Adım: İşleci kaydetme
İşleci .user_defined_operators.yaml dosyanıza ekleyin:
operators:
- catalog: main
schema: example_output
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, Operatörünüzü Lakeflow Designer'a kaydetme ve dağıtma bölümüne bakınız.
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:
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
USE CONNECTION İzin olmadan, kullanıcılar işlevi yürütseler bile API çağrıları yapamazlar.
Adım 7: Lakeflow Designer'daki operatörü kullanın
- Görsel bir veri hazırlığında, sol paneldeki Operatörler menüsünü açın ve Slack Mesajı Gönder operatörünü bulun.
- Operatörü tuvale sürükleyin ve ona bir giriş bağlayın.
- Operatöre yapılandırma panelini açmak için çift tıklayın, ardından alanlarını ayarlayın.
- Sonuçları çıkış panelinde önizlemek için operatörü seçin.
Operatörde şunlar vardı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.
İpuçları ve en iyi uygulamalar
Dış API'leri çağıran operatörler oluştururken aşağıdaki örnekleri ve yönergeleri kullanın.
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. Bunları Unity Kataloğu HTTP bağlantısında saklayıp ve bunu
http_request()ile çağırın - 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.