Oktatóanyag: Az összes felhasználói felületi widget bemutatója

Ebben az oktatóanyagban egy, a Lakeflow Designerhez készült Python UDF-operátort hoz létre, amely a user-defined-operator-v0.1.0 sémában elérhető összes felületi elemet használja. Használja sablonként saját operátorok létrehozásakor. A szélesebb körű áttekintésért tekintse meg a Felhasználó által definiált operátorokat a Lakeflow Designerben.

Overview

Ez az operátor egy bemutató UDF, amely minden elérhető felhasználói felületi widgettípussal elfogadja a paramétereket. Az összes bemeneti értéket leíró sztringbe fűzi össze, így könnyen áttekinthető, hogy az egyes vezérlők hogyan továbbítják az adatokat a függvénynek.

Az elérhető vezérlőtípusok a következők:

Widget Description Adattípus
expression Oszlop- vagy kifejezésválasztó bemeneti portról kifejezés
input Egysoros szövegbevitel karakterlánc
textarea Többsoros szövegterület karakterlánc
checkbox Jelölőnégyzet-kapcsoló logikai
toggle Váltás váltógombbal logikai
number Számbevitel minimális/maximális értékekkel number
slider Numerikus tartományos csúszka number
select Egyválasztós legördülő lista (statikus értékek) karakterlánc
select Egyválasztós legördülő lista (bemeneti oszlopokból) karakterlánc
multi-select Többszörös kijelölés (statikus értékek) string[]
multi-select Többszörös kijelölés (bemeneti oszlopokból) string[]

Step 1: A Python függvény írása és tesztelése

Először határozza meg a Python függvényt, amely az összes különböző paramétertípust elfogadja. Ez a függvény egyszerűen összefűzi az összes bemenetet egy leíró sztringbe bemutató célokra.

def concat_all_widgets(
    expression_widget_value: str,
    input_widget_value: str,
    textarea_widget_value: str,
    checkbox_widget_value: bool,
    toggle_widget_value: bool,
    number_widget_value: float,
    slider_widget_value: float,
    select_static_widget_value: str,
    select_columns_widget_value: str,
    multiselect_static_widget_value: list,
    multiselect_columns_widget_value: 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) -> {expression_widget_value}",
        f"2: Text Input (Single Line) -> {input_widget_value}",
        f"3: Text Area (Multi-Line) -> {textarea_widget_value}",
        f"4: Checkbox Option -> {checkbox_widget_value}",
        f"5: Toggle Switch -> {toggle_widget_value}",
        f"6: Number Input -> {number_widget_value}",
        f"7: Slider Value -> {slider_widget_value}",
        f"8: Select (Static Options) -> {select_static_widget_value}",
        f"9: Select (From Input Columns) -> {select_columns_widget_value}",
        f"10: Multi-Select (Static Options) -> [{', '.join(multiselect_static_widget_value or [])}]",
        f"11: Multi-Select (From Input Columns) -> [{', '.join(multiselect_columns_widget_value or [])}]"
    ]
    return "\n".join(lines)

Tesztelje a függvényt a következő kóddal:

result = concat_all_widgets(
    expression_widget_value="column_value_123",
    input_widget_value="Hello World",
    textarea_widget_value="Line 1\nLine 2\nLine 3",
    checkbox_widget_value=True,
    toggle_widget_value=False,
    number_widget_value=42.5,
    slider_widget_value=75.0,
    select_static_widget_value="option_b",
    select_columns_widget_value="amount",
    multiselect_static_widget_value=["tag1", "tag3"],
    multiselect_columns_widget_value=["col1", "col3"]
)
print(result)

2. lépés: A YAML-konfiguráció létrehozása

A YAML-konfiguráció határozza meg, hogyan jelenik meg az operátor a Lakeflow Designerben. Ez a példa az összes elérhető widgettípust bemutatja:

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
    # ============================================
    expression_widget_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)
    # ============================================
    input_widget_value:
      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)
    # ============================================
    textarea_widget_value:
      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_widget_value:
      type: boolean
      title: 4. Checkbox Option
      default: true
      x-ui:
        widget: checkbox

    # ============================================
    # TOGGLE WIDGET (boolean switch)
    # ============================================
    toggle_widget_value:
      type: boolean
      title: 5. Toggle Switch
      default: false
      x-ui:
        widget: toggle

    # ============================================
    # NUMBER WIDGET (numeric input with min/max)
    # ============================================
    number_widget_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_widget_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_widget_value:
      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_columns_widget_value:
      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
    # ============================================
    multiselect_static_widget_value:
      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
    # ============================================
    multiselect_columns_widget_value:
      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:
    - expression_widget_value
  additionalProperties: false
ports:
  input:
    - name: in
      title: Input Data
  output:
    - name: out
      title: Output

Sémakiemelések

Konfigurációs kulcs Widget Adattípus Alkalmazás célja
expression_widget_value expression kifejezés Válasszon egy oszlopot vagy kifejezést a bemeneti adatokból.
input_widget_value input karakterlánc Egysoros szövegbevitel.
textarea_widget_value textarea karakterlánc Többsoros szövegbevitel.
checkbox_widget_value checkbox logikai Logikai jelölőnégyzet.
toggle_widget_value toggle logikai Logikai váltókapcsoló.
number_widget_value number number Numerikus bemenet minimális/maximális ellenőrzéssel.
slider_widget_value slider number Numerikus csúszka lépésenkénti növekményekkel.
select_static_widget_value select karakterlánc Legördülő lista a rögzített beállításokkal.
select_columns_widget_value select karakterlánc Beviteli oszlopokból kitöltött legördülő lista.
multiselect_static_widget_value multi-select string[] Többszörös kijelölés fixen beépített lehetőségekkel.
multiselect_columns_widget_value multi-select string[] A többválasztós mező a bemeneti oszlopokból van feltöltve.

Beállítások forrástípusai

A select és multi-select widgetekhez meg kell adnia egy optionsSource elemet:

Statikus beállítások: Az értékek rögzített listája:

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

Bemeneti oszlopok: Dinamikus lista bemeneti portoszlopokból:

optionsSource:
  type: inputColumns
  port: in

A felhasználó által definiált operátor YAML-referenciájában átfogó útmutatót talál az összes elérhető tulajdonságról, adattípusról, widgetről és beállításról.

3. lépés: A Unity Catalog függvény létrehozása

A YAML-konfigurációt és Python függvényt egyetlen CREATE FUNCTION utasításba kombinálhatja. Vegye figyelembe, hogy a string[] (többes kijelölésű) értékek ARRAY<STRING> formában kerülnek átadásra az UDF-nek.

A példa létrehozza a függvényt -ben main.example_output. Először hozd létre a sémát, ha nem létezik:

CREATE SCHEMA IF NOT EXISTS main.example_output
CREATE OR REPLACE FUNCTION main.example_output.all_widgets_demo(
    expression_widget_value STRING,
    input_widget_value STRING,
    textarea_widget_value STRING,
    checkbox_widget_value BOOLEAN,
    toggle_widget_value BOOLEAN,
    number_widget_value DOUBLE,
    slider_widget_value DOUBLE,
    select_static_widget_value STRING,
    select_columns_widget_value STRING,
    multiselect_static_widget_value ARRAY<STRING>,
    multiselect_columns_widget_value 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:
      expression_widget_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_value:
        type: string
        title: 2. Text Input (Single Line)
        default: "default text"
        examples:
          - "Enter a single line of text"
        x-ui:
          widget: input
      textarea_widget_value:
        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_value:
        type: boolean
        title: 4. Checkbox Option
        default: true
        x-ui:
          widget: checkbox
      toggle_widget_value:
        type: boolean
        title: 5. Toggle Switch
        default: false
        x-ui:
          widget: toggle
      number_widget_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_value:
        type: number
        title: 7. Slider Value
        default: 50
        minimum: 0
        maximum: 100
        x-ui:
          widget: slider
          step: 5
      select_static_widget_value:
        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_columns_widget_value:
        type: string
        title: 9. Select (From Input Columns)
        examples:
          - "Select a column from input"
        x-ui:
          widget: select
          optionsSource:
            type: inputColumns
            port: in
      multiselect_static_widget_value:
        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
      multiselect_columns_widget_value:
        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:
      - expression_widget_value
    additionalProperties: false
  ports:
    input:
      - name: in
        title: Input Data
    output:
      - name: out
        title: Output
  """

  def concat_all_widgets(
      expression_widget_value: str,
      input_widget_value: str,
      textarea_widget_value: str,
      checkbox_widget_value: bool,
      toggle_widget_value: bool,
      number_widget_value: float,
      slider_widget_value: float,
      select_static_widget_value: str,
      select_columns_widget_value: str,
      multiselect_static_widget_value: list,
      multiselect_columns_widget_value: list
  ) -> str:
      lines = [
          f"1: Expression (Column Picker) -> {expression_widget_value}",
          f"2: Text Input (Single Line) -> {input_widget_value}",
          f"3: Text Area (Multi-Line) -> {textarea_widget_value}",
          f"4: Checkbox Option -> {checkbox_widget_value}",
          f"5: Toggle Switch -> {toggle_widget_value}",
          f"6: Number Input -> {number_widget_value}",
          f"7: Slider Value -> {slider_widget_value}",
          f"8: Select (Static Options) -> {select_static_widget_value}",
          f"9: Select (From Input Columns) -> {select_columns_widget_value}",
          f"10: Multi-Select (Static Options) -> [{', '.join(multiselect_static_widget_value or [])}]",
          f"11: Multi-Select (From Input Columns) -> [{', '.join(multiselect_columns_widget_value or [])}]"
      ]
      return "\n".join(lines)

  return concat_all_widgets(
      expression_widget_value,
      input_widget_value,
      textarea_widget_value,
      checkbox_widget_value,
      toggle_widget_value,
      number_widget_value,
      slider_widget_value,
      select_static_widget_value,
      select_columns_widget_value,
      multiselect_static_widget_value,
      multiselect_columns_widget_value
  )
$$

4. lépés: A függvény tesztelése

Tesztelje az UC függvényt közvetlenül az SQL használatával:

SELECT main.example_output.all_widgets_demo(
    expression_widget_value => 'my_column_value',
    input_widget_value => 'Hello World',
    textarea_widget_value => 'Multi\nLine\nText',
    checkbox_widget_value => TRUE,
    toggle_widget_value => FALSE,
    number_widget_value => 42.5,
    slider_widget_value => 75.0,
    select_static_widget_value => 'option_b',
    select_columns_widget_value => 'amount',
    multiselect_static_widget_value => array('tag1', 'tag3'),
    multiselect_columns_widget_value => array('col1', 'col2', 'col3')
) AS result;

5. lépés: Az operátor regisztrálása

Adja hozzá az operátort a(z) .user_defined_operators.yaml fájlhoz:

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

6. lépés: Engedélyek beállítása

Hozzáférés biztosítása azoknak a felhasználóknak, akiknek ezt az operátort kell használniuk:

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

Az operátor használata a Lakeflow Designerben

A regisztráció után az operátor megjelenik a Lakeflow Designerben egy átfogó konfigurációs panelen, amely a következőket tartalmazza:

  • Kifejezésválasztó az oszlopkijelöléshez
  • Szöveges bemenetek (egysoros és többsoros)
  • Logikai vezérlők (jelölőnégyzet és kapcsoló)
  • Numerikus bemenetek (számmező és csúszka)
  • Legördülő listák statikus és dinamikus beállításokkal
  • Több érték kiválasztására szolgáló vezérlők

Ez az operátor hasznos hivatkozásként szolgál annak megértéséhez, hogy az egyes vezérlőtípusok hogyan jelenítik meg és továbbítja az adatokat a függvénynek.

Minden widget adattípusát és beállításait a felhasználói felületi vezérlőkben találhatja meg.