Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Important
Эта функция доступна в общедоступной предварительной версии.
В этом руководстве вы создадите оператор SQL UDF для Конструктора Lakeflow, который публикует сообщения в каналы Slack. Пользовательские функции SQL лучше всего подходят, когда функции нужно вызывать внешние API по HTTP. Более широкий обзор см. в разделе "Определяемые пользователем операторы" в конструкторе Lakeflow.
Overview
Этот оператор отправляет сообщения в Slack с помощью:
- SQL UDF: записано в SQL, а не Python.
- HTTP-подключение Unity Catalog: обеспечивает безопасное управление учетными данными API Slack.
- Поддержка режима предварительной версии: предотвращает фактические вызовы API Slack во время предварительной версии рабочего процесса.
- Параметры выражений: позволяют динамически формировать содержимое сообщения на основе столбцов DataFrame.
Почему UDF SQL?
Для операторов, которым нужно вызывать внешние API (например, Slack, REST-конечные точки или вебхуки), необходимо использовать пользовательские функции SQL (UDF). Python UDFs и UDTFs не могут выполнять HTTP-запросы. Пользовательские функции SQL имеют доступ к функции http_request(), которая работает с подключениями Unity Catalog.
Шаг 1. Настройка HTTP-подключения каталога Unity
Перед созданием UDF необходимо настроить HTTP-подключение каталога Unity для безопасного хранения учетных данных API Slack. Замените <xoxb-your-slack-bot-token> на ваш реальный токен Slack Bot. Это можно получить из параметров приложения Slack. Одно и то же подключение можно использовать в нескольких пользовательских функциях. Дополнительные сведения см. в статье "Подключение к внешним службам HTTP".
-- 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. Создание оператора YAML
Теперь вы создадите YAML для оператора. Дополнительные сведения о схеме см. в справочнике по YAML для определяемого пользователем оператора.
YamL для этого оператора включает:
-
Параметр «Выражение» (
msg): позволяет динамически формировать содержимое сообщения из столбцов DataFrame. -
Строковый параметр (
channel): имя или идентификатор статического канала. -
Режим предварительного просмотра (
is_preview): свойство конфигурации сformat: is_preview, которое включает режим предварительного просмотра, чтобы предотвратить реальные вызовы API во время тестирования.
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
Сюда входит следующее:
| Ключ конфигурации | Widget | Purpose |
|---|---|---|
msg |
expression |
Динамическое содержимое сообщения из входных данных. |
channel |
text |
Канал Slack для отправки (например, #alerts). |
is_preview |
n/a | Свойство конфигурации логического типа format: is_preview, которое позволяет оператору вести себя иначе в режиме предварительного просмотра (в данном случае не создавать сообщение в Slack). |
Шаг 3. Создание функции каталога Unity
При создании пользовательских функций SQL (UDF) есть несколько особенностей, которые отличают их от большинства SQL-запросов:
-
RETURNИспользуйте синтаксис вместоAS $$. - Внедрение конфигурации YAML в блок комментариев SQL (
/* ... */). - Может использовать функцию
http_requestдля вызовов 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
);
Эта функция SQL включает следующие функции:
| Функция | Purpose |
|---|---|
http_request() |
Выполняет вызовы HTTP к внешним API. |
conn => 'my_slack_connection' |
Ссылается на подключение UC для проверки подлинности. |
to_json() и named_struct(). |
Создает полезные данные JSON для API Slack. |
| Блок комментариев YAML | Используется конструктором Lakeflow для создания оператора. |
CASE WHEN |
Реализует логику режима предварительной версии. |
Шаг 4. Проверка функции
Затем проверьте функцию, чтобы убедиться, что она работает перед регистрацией ее в качестве оператора.
Сначала протестируйте в режиме предварительной версии, чтобы избежать отправки сообщения 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"
Тестирование с помощью внешнего вызова API (отправляет сообщение в 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
Шаг 5. Регистрация оператора
Добавьте оператор в свой файл .user_defined_operators.yaml:
operators:
- catalog: main
schema: my_schema
functionName: send_slack_msg
Note
Если этот файл определен в папке пользователя, он отображается только для вас. Дополнительные сведения см. в статье Сделать оператор обнаруживаемым.
Шаг 6. Настройка разрешений
Для пользовательских функций SQL, использующих подключения Unity Catalog, пользователям требуется дополнительное разрешение:
-- 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 Без разрешения пользователи не смогут вызывать API, даже если они могут выполнить функцию.
Использование оператора в конструкторе Lakeflow
После регистрации оператор появится в Конструкторе Lakeflow со следующими параметрами:
- Входной порт для подключения источника данных.
- Средство выбора выражений для выбора столбца, содержащего содержимое сообщения.
- Текстовое поле ввода для канала Slack.
Пользователи могут отправлять уведомления на основе своих данных, например оповещение о превышении определенных пороговых значений.
Распространенные варианты использования
- Оповещения — отправка уведомлений при обнаружении проблем с качеством данных.
- Уведомления — уведомлять команды о завершении рабочих процессов.
- Вебхуки — вызов внешних API для запуска последующих процессов.
- Ведение журнала — отправка сообщений аудита во внешние системы.
Рекомендации по созданию операторов вызовов API
-
Всегда используйте режим предпросмотра — добавьте свойство конфигурации
is_previewсо значениемformat: is_preview, чтобы предотвратить случайные вызовы API. - Используйте подключения Unity Catalog — никогда не прописывайте учетные данные в коде UDF. Подключения каталога Unity доступны только в пользовательских файлах SQL.
- Корректно обрабатывайте ошибки — API-вызовы могут завершиться ошибкой; подумайте, что возвращать в случае ошибки.
- Тщательно протестируйте — используйте режим предварительной версии во время разработки.
- Задокументируйте настройку подключения . Пользователи должны знать, какое соединение необходимо создать.