Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Important
Эта функция доступна в общедоступной предварительной версии.
В этом справочном руководстве показано, как создать оператор Python UDF для Lakeflow Designer, который задействует все виджеты пользовательского интерфейса, доступные в схеме user-defined-operator-v0.1.0. Используйте его в качестве шаблона при создании собственных операторов. Более широкий обзор см. в разделе "Определяемые пользователем операторы" в конструкторе Lakeflow.
Overview
Этот оператор представляет собой демонстрационную UDF-функцию, использующую все доступные типы элементов интерфейса для приема параметров. Он объединяет все входные значения в описательную строку, что позволяет легко увидеть, как каждое мини-приложение передает данные в функцию.
Доступные типы мини-приложений:
| Widget | Description | Тип данных |
|---|---|---|
expression |
Средство выбора столбцов и выражений из входного порта | expression |
input |
Однострочный текстовый ввод | string |
textarea |
Многострочный текстовый регион | string |
checkbox |
Переключатель флажка | Boolean |
toggle |
Переключение переключателя | Boolean |
number |
Числовое поле ввода с минимальным и максимальным значениями | number |
slider |
Числовой ползунок с диапазоном | number |
select |
Раскрывающийся список с одним выбором (статические значения) | string |
select |
Раскрывающийся список с возможностью выбора одного значения (из входных столбцов) | string |
multi-select |
Множественный выбор (статические значения) | string[] |
multi-select |
Множественный выбор (во входных столбцах) | string[] |
Step 1: запись и проверка функции Python
Сначала определите функцию Python, которая принимает все различные типы параметров. Эта функция просто объединяет все входные данные в описательную строку для демонстрационных целей.
def concat_all_widgets(
# expression widget - column value from input
expr_value: str,
# input widget - single line text
text_input: str,
# textarea widget - multi line text
text_area: str,
# checkbox widget - boolean
checkbox_flag: bool,
# toggle widget - boolean
toggle_flag: bool,
# number widget - numeric input
number_value: float,
# slider widget - numeric slider
slider_value: float,
# select widget with static options
select_static: str,
# select widget with inputColumns options
select_column: str,
# multi-select widget with static options (array of strings)
multi_select_static: list,
# multi-select widget with inputColumns options (array of strings)
multi_select_columns: list
) -> str:
"""
Concatenates all input parameters into a descriptive string.
This demonstrates all UI widget types available in user-defined operators.
"""
lines = [
f"1: Expression (Column Picker) -> {expr_value}",
f"2: Text Input (Single Line) -> {text_input}",
f"3: Text Area (Multi-Line) -> {text_area}",
f"4: Checkbox Option -> {checkbox_flag}",
f"5: Toggle Switch -> {toggle_flag}",
f"6: Number Input -> {number_value}",
f"7: Slider Value -> {slider_value}",
f"8: Select (Static Options) -> {select_static}",
f"9: Select (From Input Columns) -> {select_column}",
f"10: Multi-Select (Static Options) -> [{', '.join(multi_select_static or [])}]",
f"11: Multi-Select (From Input Columns) -> [{', '.join(multi_select_columns or [])}]"
]
return "\n".join(lines)
Проверьте функцию с помощью следующего кода:
result = concat_all_widgets(
expr_value="column_value_123",
text_input="Hello World",
text_area="Line 1\nLine 2\nLine 3",
checkbox_flag=True,
toggle_flag=False,
number_value=42.5,
slider_value=75.0,
select_static="option_b",
select_column="amount",
multi_select_static=["tag1", "tag3"],
multi_select_columns=["col1", "col3"]
)
print(result)
Шаг 2. Создание конфигурации YAML
Конфигурация YAML определяет, как оператор отображается в конструкторе Lakeflow. В этом примере демонстрируется каждый доступный тип мини-приложения:
schema: user-defined-operator-v0.1.0
type: uc-udf
name: All Widgets Demo
id: demo.all_widgets
version: '1.0.0'
description: >
A demonstration UDF that showcases all available UI widgets.
config:
type: object
properties:
# ============================================
# EXPRESSION WIDGET
# ============================================
expr_value:
type: string
format: expression
title: 1. Expression (Column Picker)
examples:
- 'Select a column or enter an expression'
x-ui:
widget: expression
port: in
# ============================================
# INPUT WIDGET (single-line text)
# ============================================
text_input:
type: string
title: 2. Text Input (Single Line)
default: default text
examples:
- 'Enter a single line of text'
x-ui:
widget: input
# ============================================
# TEXTAREA WIDGET (multi-line text)
# ============================================
text_area:
type: string
title: 3. Text Area (Multi-Line)
default: Sample text
examples:
- 'Enter multiple lines of text here...'
x-ui:
widget: textarea
rows: 3
# ============================================
# CHECKBOX WIDGET (boolean)
# ============================================
checkbox_flag:
type: boolean
title: 4. Checkbox Option
default: true
x-ui:
widget: checkbox
# ============================================
# TOGGLE WIDGET (boolean switch)
# ============================================
toggle_flag:
type: boolean
title: 5. Toggle Switch
default: false
x-ui:
widget: toggle
# ============================================
# NUMBER WIDGET (numeric input with min/max)
# ============================================
number_value:
type: number
title: 6. Number Input
default: 50
minimum: 0
maximum: 100
examples:
- 'Enter a number (0-100)'
x-ui:
widget: number
# ============================================
# SLIDER WIDGET (numeric slider)
# ============================================
slider_value:
type: number
title: 7. Slider Value
default: 50
minimum: 0
maximum: 100
x-ui:
widget: slider
step: 5
# ============================================
# SELECT WIDGET with STATIC options
# ============================================
select_static:
type: string
title: 8. Select (Static Options)
default: option_a
examples:
- 'Choose an option'
x-ui:
widget: select
optionsSource:
type: static
values:
- option_a
- option_b
- option_c
# ============================================
# SELECT WIDGET with INPUT COLUMNS options
# ============================================
select_column:
type: string
title: 9. Select (From Input Columns)
examples:
- 'Select a column from input'
x-ui:
widget: select
optionsSource:
type: inputColumns
port: in
# ============================================
# MULTI-SELECT WIDGET with STATIC options
# ============================================
multi_select_static:
type: array
items:
type: string
title: 10. Multi-Select (Static Options)
default:
- tag1
- tag2
examples:
- 'Select one or more tags'
x-ui:
widget: multi-select
optionsSource:
type: static
values:
- tag1
- tag2
- tag3
- tag4
- tag5
# ============================================
# MULTI-SELECT WIDGET with INPUT COLUMNS options
# ============================================
multi_select_columns:
type: array
items:
type: string
title: 11. Multi-Select (From Input Columns)
examples:
- 'Select one or more columns'
x-ui:
widget: multi-select
optionsSource:
type: inputColumns
port: in
required:
- expr_value
additionalProperties: false
ports:
input:
- name: in
title: Input Data
output:
- name: out
title: Output
Основные моменты схемы
| Ключ конфигурации | Widget | Тип данных | Purpose |
|---|---|---|---|
expr_value |
expression |
expression | Выберите столбец или выражение из входных данных. |
text_input |
input |
string | Однострочное текстовое поле. |
text_area |
textarea |
string | Многострочный ввод текста. |
checkbox_flag |
checkbox |
Boolean | Логический флажок. |
toggle_flag |
toggle |
Boolean | Логический переключатель. |
number_value |
number |
number | Числовые входные данные с минимальной или максимальной проверкой. |
slider_value |
slider |
number | Числовой ползунок с шагом изменения. |
select_static |
select |
string | Раскрывающийся список с жёстко заданными значениями. |
select_column |
select |
string | Выпадающий список, заполняемый на основе входных столбцов. |
multi_select_static |
multi-select |
string[] | Несколько вариантов выбора с жестко заданными параметрами. |
multi_select_columns |
multi-select |
string[] | Множественный выбор, заполняемый из входных столбцов. |
Типы источников параметров
Для виджетов select и multi-select необходимо указать optionsSource:
Статические параметры — фиксированный список значений:
optionsSource:
type: static
values:
- value1
- value2
- value3
Входные столбцы — динамический список из столбцов входных портов:
optionsSource:
type: inputColumns
port: in
См. справочник по YAML для пользовательских операторов, где приведено подробное руководство по всем доступным свойствам, типам данных, виджетам и параметрам.
Шаг 3. Создание функции каталога Unity
Объедините конфигурацию YAML и функцию Python в одну инструкцию CREATE FUNCTION. Обратите внимание, что значения string[] (с множественным выбором) передаются в UDF в виде ARRAY<STRING>.
CREATE OR REPLACE FUNCTION main.my_schema.all_widgets_demo(
expr_value STRING,
text_input STRING,
text_area STRING,
checkbox_flag BOOLEAN,
toggle_flag BOOLEAN,
number_value DOUBLE,
slider_value DOUBLE,
select_static STRING,
select_column STRING,
multi_select_static ARRAY<STRING>,
multi_select_columns ARRAY<STRING>
)
RETURNS STRING
LANGUAGE PYTHON
AS $$
"""
schema: user-defined-operator-v0.1.0
type: uc-udf
name: All Widgets Demo
id: demo.all_widgets
version: "1.0.0"
description: >
A demonstration UDF that showcases all available UI widgets.
config:
type: object
properties:
expr_value:
type: string
format: expression
title: 1. Expression (Column Picker)
examples:
- "Select a column or enter an expression"
x-ui:
widget: expression
port: in
text_input:
type: string
title: 2. Text Input (Single Line)
default: "default text"
examples:
- "Enter a single line of text"
x-ui:
widget: input
text_area:
type: string
title: 3. Text Area (Multi-Line)
default: Sample text
examples:
- "Enter multiple lines of text here..."
x-ui:
widget: textarea
rows: 3
checkbox_flag:
type: boolean
title: 4. Checkbox Option
default: true
x-ui:
widget: checkbox
toggle_flag:
type: boolean
title: 5. Toggle Switch
default: false
x-ui:
widget: toggle
number_value:
type: number
title: 6. Number Input
default: 50
minimum: 0
maximum: 100
examples:
- "Enter a number (0-100)"
x-ui:
widget: number
slider_value:
type: number
title: 7. Slider Value
default: 50
minimum: 0
maximum: 100
x-ui:
widget: slider
step: 5
select_static:
type: string
title: 8. Select (Static Options)
default: option_a
examples:
- "Choose an option"
x-ui:
widget: select
optionsSource:
type: static
values:
- option_a
- option_b
- option_c
select_column:
type: string
title: 9. Select (From Input Columns)
examples:
- "Select a column from input"
x-ui:
widget: select
optionsSource:
type: inputColumns
port: in
multi_select_static:
type: array
items:
type: string
title: 10. Multi-Select (Static Options)
default:
- tag1
- tag2
examples:
- "Select one or more tags"
x-ui:
widget: multi-select
optionsSource:
type: static
values:
- tag1
- tag2
- tag3
- tag4
- tag5
multi_select_columns:
type: array
items:
type: string
title: 11. Multi-Select (From Input Columns)
examples:
- "Select one or more columns"
x-ui:
widget: multi-select
optionsSource:
type: inputColumns
port: in
required:
- expr_value
additionalProperties: false
ports:
input:
- name: in
title: Input Data
output:
- name: out
title: Output
"""
def concat_all_widgets(
expr_value: str,
text_input: str,
text_area: str,
checkbox_flag: bool,
toggle_flag: bool,
number_value: float,
slider_value: float,
select_static: str,
select_column: str,
multi_select_static: list,
multi_select_columns: list
) -> str:
lines = [
f"1: Expression (Column Picker) -> {expr_value}",
f"2: Text Input (Single Line) -> {text_input}",
f"3: Text Area (Multi-Line) -> {text_area}",
f"4: Checkbox Option -> {checkbox_flag}",
f"5: Toggle Switch -> {toggle_flag}",
f"6: Number Input -> {number_value}",
f"7: Slider Value -> {slider_value}",
f"8: Select (Static Options) -> {select_static}",
f"9: Select (From Input Columns) -> {select_column}",
f"10: Multi-Select (Static Options) -> [{', '.join(multi_select_static or [])}]",
f"11: Multi-Select (From Input Columns) -> [{', '.join(multi_select_columns or [])}]"
]
return "\n".join(lines)
return concat_all_widgets(
expr_value,
text_input,
text_area,
checkbox_flag,
toggle_flag,
number_value,
slider_value,
select_static,
select_column,
multi_select_static,
multi_select_columns
)
$$
Шаг 4. Проверка функции
Протестируйте функцию UC непосредственно с помощью SQL:
SELECT main.my_schema.all_widgets_demo(
'my_column_value', -- expr_value (expression)
'Hello World', -- text_input (input)
'Multi\nLine\nText', -- text_area (textarea)
TRUE, -- checkbox_flag (checkbox)
FALSE, -- toggle_flag (toggle)
42.5, -- number_value (number)
75.0, -- slider_value (slider)
'option_b', -- select_static (select with static)
'amount', -- select_column (select with inputColumns)
array('tag1', 'tag3'), -- multi_select_static (multi-select with static)
array('col1', 'col2', 'col3') -- multi_select_columns (multi-select with inputColumns)
) AS result;
Шаг 5. Регистрация оператора
Добавьте оператор в свой файл .user_defined_operators.yaml:
operators:
- catalog: main
schema: my_schema
functionName: all_widgets_demo
Шаг 6. Настройка разрешений
Предоставьте доступ пользователям, которым требуется использовать этот оператор:
GRANT USE SCHEMA ON SCHEMA main.my_schema TO `<user>`;
GRANT EXECUTE ON FUNCTION main.my_schema.all_widgets_demo TO `<user>`;
Использование оператора в конструкторе Lakeflow
После регистрации оператор появится в Конструкторе Lakeflow с подробной панелью конфигурации, включающей:
- Средство выбора выражений для выбора столбца
- Текстовые входные данные (однострочные и многострочные)
- Логические элементы управления (флажок и переключатель)
- Числовые входные данные (поле числа и ползунок)
- Раскрывающиеся списки, содержащие как статические, так и динамические варианты
- Элементы управления с несколькими выборами для выбора нескольких значений
Этот элемент служит удобным справочным материалом для понимания того, как каждый тип виджета отображается и передает данные вашей функции.
Краткий справочник по виджетам
| Widget | Тип данных | Параметры пользовательского интерфейса |
|---|---|---|
expression |
expression |
port (обязательно) placeholder |
input |
string |
placeholder |
textarea |
string |
rows, placeholder |
checkbox |
boolean |
placeholder |
toggle |
boolean |
placeholder |
number |
number |
min, max, placeholder |
slider |
number |
min, max, step, placeholder |
select |
string |
optionsSource (обязательно) placeholder |
multi-select |
string[] |
optionsSource (обязательно) placeholder |