Kurz: Ukázka všech widgetů uživatelského rozhraní

V tomto kurzu vytvoříte operátor Python UDF pro Návrháře Lakeflow, který provede cvičení všech widgetů uživatelského rozhraní dostupných ve schématuuser-defined-operator-v0.1.0. Použijte ho jako šablonu při vytváření vlastních operátorů. Širší přehled najdete v tématu Uživatelem definované operátory v Návrháři Lakeflow.

Overview

Tento operátor je ukázková uživatelsky definovaná funkce (UDF), která přijímá parametry prostřednictvím všech dostupných typů prvků uživatelského rozhraní. Zřetězí všechny vstupní hodnoty do popisného řetězce, aby bylo možné snadno zjistit, jak jednotlivé widgety předá data do vaší funkce.

Dostupné typy widgetů jsou:

Widget Description Datový typ
expression Výběr sloupce nebo výrazu ze vstupního portu výraz
input Jednořádkový textový vstup řetězec
textarea Textová oblast s více řádky řetězec
checkbox Přepínač políčka logický
toggle Přepínač logický
number Pole pro zadání čísla s minimální a maximální hodnotou number
slider Číselný posuvník s rozsahem number
select Rozevírací seznam s jedním výběrem (statické hodnoty) řetězec
select Rozbalovací seznam s jedním výběrem (ze vstupních sloupců) řetězec
multi-select Vícenásobný výběr (statické hodnoty) string[]
multi-select Vícenásobný výběr (ze vstupních sloupců) string[]

Step 1: Zápis a otestování funkce Python

Nejprve definujte funkci Python, která přijímá všechny různé typy parametrů. Tato funkce jednoduše zřetězí všechny vstupy do popisného řetězce pro demonstrační účely.

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)

Otestujte funkci pomocí následujícího kódu:

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)

Krok 2: Vytvoření konfigurace YAML

Konfigurace YAML definuje, jak se operátor zobrazuje v Návrháři Lakeflow. Tento příklad ukazuje každý dostupný typ widgetu:

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

Zvýraznění schématu

Konfigurační klíč Widget Datový typ Purpose
expr_value expression výraz Vyberte sloupec nebo výraz ze vstupních dat.
text_input input řetězec Jednořádkové textové pole.
text_area textarea řetězec Zadání víceřádkového textu
checkbox_flag checkbox logický Logické zaškrtávací políčko.
toggle_flag toggle logický Booleovský přepínač.
number_value number number Číselný vstup s minimálním nebo maximálním ověřením
slider_value slider number Numerický posuvník s krokovým přírůstkem
select_static select řetězec Rozevírací seznam s pevně zakódovanými možnostmi
select_column select řetězec Rozevírací seznam naplněný ze vstupních sloupců
multi_select_static multi-select string[] Vícenásobný výběr s pevně zakódovanými možnostmi
multi_select_columns multi-select string[] Vícenásobný výběr naplněný ze vstupních sloupců

Možnosti typů zdrojů

U widgetů select a multi-select je nutné zadat optionsSource:

Statické možnosti: Pevný seznam hodnot:

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

Vstupní sloupce: Dynamický seznam ze sloupců vstupního portu:

optionsSource:
  type: inputColumns
  port: in

Podrobný průvodce všemi dostupnými vlastnostmi, datovými typy, widgety a možnostmi najdete v referenční dokumentaci YAML uživatelem definovaného operátora .

Krok 3: Vytvoření funkce Katalogu Unity

Zkombinujte konfiguraci YAML a funkci Python do jednoho příkazu CREATE FUNCTION. Všimněte si, že hodnoty string[] (vícenásobný výběr) se do UDF předávají jako 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
  )
$$

Krok 4: Testování funkce

Otestujte funkci UC přímo pomocí 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;

Krok 5: Registrace operátoru

Přidejte operátor do souboru .user_defined_operators.yaml:

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

Krok 6: Nastavení oprávnění

Udělte přístup uživatelům, kteří potřebují používat tento operátor:

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

Použití operátoru v nástroji Lakeflow Designer

Po registraci se operátor zobrazí v Návrháři Lakeflow s komplexním podoknem konfigurace s následujícími informacemi:

  • Výběr výrazů pro výběr sloupců
  • Textové vstupy (jednořádkové a víceřádkové)
  • Logické ovládací prvky (zaškrtávací políčko a přepínač)
  • Číselné vstupy (číselné pole a posuvník)
  • Rozevírací seznamy se statickými i dynamickými volbami
  • Vícenásobný výběr ovládacích prvků pro výběr více hodnot

Tento operátor slouží jako užitečný referenční bod pro pochopení toho, jak každý typ widgetu vykresluje a předává data vaší funkci.

U datových typů a možností každého widgetu se podívejte na widgety uživatelského rozhraní.