Öğretici: Slack iletisi gönderme

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 CATALOG main katalogda, CREATE SCHEMAmain üzerinde veya USE SCHEMA ve CREATE FUNCTION mevcut bir main.example_output şeması üzerinde. Farklı bir katalog veya şema kullanmak için, main.example_output ifadesini her yerde değiştirin. Bkz Unity Kataloğu ayrıcalıkları referansı.
  • CREATE CONNECTION Unity 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 ile format: is_preview bir 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:

  • RETURN yerine AS $$ söz dizimini kullanın.
  • YAML yapılandırmasını bir SQL açıklama bloğuna (/* ... */ ) ekleyin.
  • API çağrıları için http_request iş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

  1. 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.
  2. Operatörü tuvale sürükleyin ve ona bir giriş bağlayın.
  3. Operatöre yapılandırma panelini açmak için çift tıklayın, ardından alanlarını ayarlayın.
  4. 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

  1. Her zaman önizleme modunu kullan: Yanlışlıkla YAPıLAN API çağrılarını önlemek için ile is_preview bir format: is_preview yapılandırma özelliği ekleyin.
  2. 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
  3. 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.
  4. Kapsamlı bir şekilde test edin: Geliştirme sırasında önizleme modunu kullanın.
  5. Bağlantı kurulumunu belgele: Kullanıcıların hangi bağlantının oluşturulacağını bilmesi gerekir.

Ek kaynaklar