Öğ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. 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 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
    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:

  • 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.
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

  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. Unity Kataloğu bağlantıları yalnızca SQL UDF'lerinde kullanılabilir.
  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.