Skip to main content

Tutorial: All UI widgets demo

Preview

This feature is in Public Preview.

This reference tutorial builds a Python UDF operator for Lakeflow Designer that exercises every UI widget available in the user-defined-operator-v0.1.0 schema. Use it as a template when creating your own operators. For a broader overview, see User-defined operators in Lakeflow Designer.

Overview

This operator is a demonstration UDF that accepts parameters using every available UI widget type. It concatenates all input values into a descriptive string, making it easy to see how each widget passes data to your function.

The available widget types are:

Widget

Description

Data Type

expression

Column/expression picker from input port

expression

input

Single-line text input

string

textarea

Multi-line text area

string

checkbox

Checkbox toggle

Boolean

toggle

Switch toggle

Boolean

number

Number input with min/max

number

slider

Numeric slider with range

number

select

Single-select dropdown (static values)

string

select

Single-select dropdown (from input columns)

string

multi-select

Multi-select (static values)

string[]

multi-select

Multi-select (from input columns)

string[]

Step 1: Write and test the Python function

First, define the Python function that accepts all the different parameter types. This function simply concatenates all inputs into a descriptive string for demonstration purposes.

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)

Test the function with the following code:

Python
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)

Step 2: Create the YAML configuration

The YAML configuration defines how the operator appears in Lakeflow Designer. This example demonstrates every available widget type:

YAML
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

Schema highlights

Config Key

Widget

Data Type

Purpose

expr_value

expression

expression

Pick a column or expression from input data.

text_input

input

string

Single-line text entry.

text_area

textarea

string

Multi-line text entry.

checkbox_flag

checkbox

Boolean

Boolean checkbox.

toggle_flag

toggle

Boolean

Boolean toggle switch.

number_value

number

number

Numeric input with min/max validation.

slider_value

slider

number

Numeric slider with step increments.

select_static

select

string

Dropdown with hardcoded options.

select_column

select

string

Dropdown populated from input columns.

multi_select_static

multi-select

string[]

Multi-select with hardcoded options.

multi_select_columns

multi-select

string[]

Multi-select populated from input columns.

Options source types

For select and multi-select widgets, you must specify an optionsSource:

Static options — Fixed list of values:

YAML
optionsSource:
type: static
values:
- value1
- value2
- value3

Input columns — Dynamic list from input port columns:

YAML
optionsSource:
type: inputColumns
port: in

See the User-defined operator YAML reference for a comprehensive guide to all available properties, data types, widgets, and options.

Step 3: Create the Unity Catalog function

Combine the YAML configuration and Python function into a single CREATE FUNCTION statement. Note that string[] (multi-select) values are passed as ARRAY<STRING> to the UDF.

SQL
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
)
$$

Step 4: Test the function

Test the UC function directly with SQL:

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;

Step 5: Register the operator

Add the operator to your .user_defined_operators.yaml file:

YAML
operators:
- catalog: main
schema: my_schema
functionName: all_widgets_demo

Step 6: Set up permissions

Grant access to users who need to use this operator:

SQL
GRANT USE SCHEMA ON SCHEMA main.my_schema TO `<user>`;
GRANT EXECUTE ON FUNCTION main.my_schema.all_widgets_demo TO `<user>`;

Using the operator in Lakeflow Designer

After it's registered, the operator will appear in Lakeflow Designer with a comprehensive configuration panel featuring:

  • An expression picker for column selection
  • Text inputs (single-line and multi-line)
  • Boolean controls (checkbox and toggle)
  • Numeric inputs (number field and slider)
  • Dropdowns with both static and dynamic options
  • Multi-select controls for choosing multiple values

This operator serves as a useful reference for understanding how each widget type renders and passes data to your function.

Widget reference summary

Widget

Data Type

UI Options

expression

expression

port (required), 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 (required), placeholder

multi-select

string[]

optionsSource (required), placeholder