Eğitim: Tüm arayüz bileşenleri demosu

Bu öğreticide, user-defined-operator-v0.1.0 şemasında kullanılabilen tüm kullanıcı arabirimi pencere öğelerini kullanan Lakeflow Designer için bir Python UDF operatörü oluşturacaksınız. Kendi işleçlerinizi oluştururken şablon olarak kullanın. Daha geniş bir genel bakış için bkz. Lakeflow Designer'da kullanıcı tanımlı işleçler.

Overview

Bu operatör, mevcut tüm UI bileşeni türlerini kullanarak parametre alan bir gösterim UDF’sidir. Tüm giriş değerlerini açıklayıcı bir dizede birleştirir ve her pencere öğesinin işlevinize nasıl veri geçtiğini görmeyi kolaylaştırır.

Kullanılabilir pencere öğesi türleri şunlardır:

Widget Description Veri Türü
expression Giriş bağlantı noktasından sütun/ifade seçici expression
input Tek satırlı metin girişi string
textarea Çok satırlı metin alanı string
checkbox Onay kutusu geçiş düğmesi Boolean
toggle Aç/kapat düğmesi Boolean
number Min/max ile sayı girişi number
slider Değer aralığı olan sayısal kaydırıcı number
select Tek seçimli açılır menü (statik değerler) string
select Girdi sütunlarından tekli seçim açılır menüsü string
multi-select Çoklu seçim (statik değerler) string[]
multi-select Çoklu seçim (giriş sütunlarından) string[]

1. Adım: Python işlevini yazma ve test edin

İlk olarak, tüm farklı parametre türlerini kabul eden Python işlevini tanımlayın. Bu işlev, gösterim amacıyla tüm girişleri açıklayıcı bir dizede birleştirir.

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)

İşlevi aşağıdaki kodla test edin:

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. Adım: YAML yapılandırmasını oluşturma

YAML yapılandırması, işlecin Lakeflow Designer'da nasıl görüneceğini tanımlar. Bu örnekte kullanılabilir tüm pencere öğesi türleri gösterilmektedir:

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

Şema vurguları

Yapılandırma Anahtarı Widget Veri Türü Purpose
expression_widget_value expression expression Giriş verilerinden bir sütun veya ifade seçin.
input_widget_value input string Tek satırlı metin girişi.
textarea_widget_value textarea string Çok satırlı metin girişi.
checkbox_widget_value checkbox Boolean Boole onay kutusu.
toggle_widget_value toggle Boolean İki durumlu geçiş anahtarı.
number_widget_value number number Minimum/maksimum doğrulama ile sayısal giriş.
slider_widget_value slider number Kademeli sayısal kaydırıcı.
select_static_widget_value select string Sabit kodlanmış seçenekler içeren açılan menü.
select_columns_widget_value select string Açılır liste girdi sütunlarından doldurulur.
multiselect_static_widget_value multi-select string[] Sabit kodlanmış seçeneklerle çoklu seçim yapın.
multiselect_columns_widget_value multi-select string[] Giriş sütunlarındaki verilerle doldurulan çoklu seçim alanı.

Seçenekler kaynak türleri

select ve multi-select pencere öğeleri için bir optionsSource belirtmeniz gerekir:

Statik seçenekler: Sabit değer listesi:

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

Giriş sütunları: Giriş bağlantı noktası sütunlarından dinamik liste:

optionsSource:
  type: inputColumns
  port: in

Tüm kullanılabilir özelliklere, veri türlerine, pencere öğelerine ve seçeneklere yönelik kapsamlı bir kılavuz için kullanıcı tanımlı işleç YAML başvurusuna bakın.

3. Adım: Unity Kataloğu işlevini oluşturma

YAML yapılandırmasını ve Python işlevini tek bir CREATE FUNCTION deyiminde birleştirin. string[] (çoklu seçim) değerlerinin UDF'ye ARRAY<STRING> olarak iletildiğini unutmayın.

Örnek, fonksiyonu main.example_output içinde oluşturur. Eğer şema yoksa, önce onu oluşturun:

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. Adım: İşlevi test edin

UC işlevini doğrudan SQL ile test edin:

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. Adım: İşleci kaydetme

İşleci .user_defined_operators.yaml dosyanıza ekleyin:

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

6. Adım: İzinleri ayarlama

Bu işleci kullanması gereken kullanıcılara erişim izni verin:

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

Lakeflow Designer'da operatörü kullanın

Operatör kaydedildikten sonra Lakeflow Designer'da görünür ve şunları içeren kapsamlı bir yapılandırma bölmesi vardır:

  • Sütun seçimi için ifade seçici
  • Metin girişleri (tek satırlı ve çok satırlı)
  • Boole denetimleri (onay kutusu ve geçiş)
  • Sayısal girişler (sayı alanı ve kaydırıcı)
  • Hem statik hem de dinamik seçenekler içeren açılan menüler
  • Birden çok değer seçmek için çoklu seçim denetimleri

Bu işleç, her pencere öğesi türünün nasıl görüntülendiğini ve verileri işlevinize nasıl aktardığını anlamak için yararlı bir başvuru kaynağıdır.

Her pencere öğesinin veri türü ve seçenekleri için bkz. Kullanıcı arabirimi pencere öğeleri.