Lernprogramm: Demo für alle UI-Widgets

Important

Dieses Feature befindet sich in der Public Preview.

In diesem Referenzlernprogramm wird ein Python UDF-Operator für Lakeflow Designer erstellt, der alle im schema user-defined-operator-v0.1.0 verfügbaren UI-Widgets ausführt. Verwenden Sie sie beim Erstellen eigener Operatoren als Vorlage. Eine umfassendere Übersicht finden Sie unter User-defined operators in Lakeflow Designer.

Überblick

Dieser Operator ist eine Demonstrations-UDF, die Parameter mit jedem verfügbaren UI-Widget-Typ akzeptiert. Es verkettet alle Eingabewerte in eine beschreibende Zeichenfolge, sodass sie leicht erkennen kann, wie jedes Widget Daten an Ihre Funktion übergibt.

Die verfügbaren Widgettypen sind:

Widget Description Datentyp
expression Spalten-/Ausdrucksauswahl vom Eingabeport expression
input Einzeilige Texteingabe string
textarea Mehrzeiliger Textbereich string
checkbox Kontrollkästchen-Umschalter Boolean
toggle Schalter umlegen Boolean
number Zahleneingabe mit min/max number
slider Numerischer Schieberegler mit Wertebereich number
select Dropdownmenü mit einzelner Auswahl (statische Werte) string
select Dropdownmenü mit einzelner Auswahl (aus Eingabespalten) string
multi-select Mehrfachauswahl (statische Werte) string[]
multi-select Mehrfachauswahl (aus Eingabespalten) string[]

Step 1: Schreiben und Testen der Python-Funktion

Definieren Sie zunächst die Python-Funktion, die alle verschiedenen Parametertypen akzeptiert. Diese Funktion verkettet einfach alle Eingaben in eine beschreibende Zeichenfolge zu Demonstrationszwecken.

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)

Testen Sie die Funktion mit dem folgenden Code:

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)

Schritt 2: Erstellen der YAML-Konfiguration

Die YAML-Konfiguration definiert, wie der Operator im Lakeflow-Designer angezeigt wird. In diesem Beispiel wird jeder verfügbare Widgettyp veranschaulicht:

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

Konfigurationsschlüssel Widget Datentyp Purpose
expr_value expression expression Wählen Sie eine Spalte oder einen Ausdruck aus Eingabedaten aus.
text_input input string Einzeilige Texteingabe.
text_area textarea string Mehrzeilige Texteingabe.
checkbox_flag checkbox Boolean Boolescher Kontrollkästchen.
toggle_flag toggle Boolean Boolescher Umschalter.
number_value number number Numerische Eingabe mit min/max. Überprüfung.
slider_value slider number Numerischer Schieberegler mit Schrittschritten.
select_static select string Dropdown mit hartcodierten Optionen.
select_column select string Dropdown mit Werten aus Eingabespalten gefüllt.
multi_select_static multi-select string[] Mehrfachauswahl mit fest codierten Optionen.
multi_select_columns multi-select string[] Mehrfachauswahl mit Daten aus den Eingabespalten gefüllt.

Optionsquellentypen

Für select und multi-select Widgets müssen Sie folgendes optionsSourceangeben:

Statische Optionen – Feste Werteliste:

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

Eingabespalten – Dynamische Liste aus Eingabeportspalten:

optionsSource:
  type: inputColumns
  port: in

Eine umfassende Anleitung zu allen verfügbaren Eigenschaften, Datentypen, Widgets und Optionen finden Sie in der YAML-Referenz für den benutzerdefinierten Operator .

Schritt 3: Erstellen der Unity-Katalogfunktion

Kombinieren Sie die YAML-Konfiguration und Python Funktion in einer einzelnen CREATE FUNCTION-Anweisung. Beachten Sie, dass string[] (Mehrfachauswahl)-Werte als ARRAY<STRING> an die UDF übergeben werden.

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

Schritt 4: Testen der Funktion

Testen Sie die UC-Funktion direkt mit 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;

Schritt 5: Registrieren des Operators

Fügen Sie den Operator Ihrer .user_defined_operators.yaml-Datei hinzu:

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

Schritt 6: Einrichten von Berechtigungen

Gewähren Sie Zugriff auf Benutzer, die diesen Operator verwenden müssen:

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

Den Operator in Lakeflow Designer verwenden

Nach der Registrierung erscheint der Betreiber in Lakeflow Designer mit einem umfassenden Konfigurationspanel mit:

  • Ein Auswähler von Ausdrücken zur Spaltenauswahl
  • Texteingaben (einzeilig und mehrzeilig)
  • Boolesche Steuerelemente (Kontrollkästchen und Umschaltfläche)
  • Numerische Eingaben (Zahlenfeld und Schieberegler)
  • Dropdowns mit statischen und dynamischen Optionen
  • Steuerelemente zur Mehrfachauswahl für die Auswahl mehrerer Werte

Dieser Operator dient als nützlicher Verweis, um zu verstehen, wie jeder Widgettyp Daten rendert und an Ihre Funktion übergibt.

Zusammenfassung der Widget-Referenz

Widget Datentyp UI-Optionen
expression expression port (erforderlich), placeholder
input string placeholder
textarea string rows, placeholder
checkbox boolean placeholder
toggle boolean placeholder
number number min, maxplaceholder
slider number min, max, step, placeholder
select string optionsSource (erforderlich), placeholder
multi-select string[] optionsSource (erforderlich), placeholder