Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Med Lakeflow Designer kan du skapa användardefinierade operatorer som visas direkt på arbetsytan tillsammans med inbyggda operatorer. Använd dem för att utöka Lakeflow Designer med din egen affärslogik, beräkningar eller integreringar.
Det finns tre typer av användardefinierade operatorer:
-
python-run-function: En fristående YAML-fil med inbäddad Python-kod lagrad i arbetsytan. Bäst för omvandlingar på DataFrame-nivå och externa integreringar. Behörigheter hanteras på arbetsytans filnivå. -
uc-udf: Omsluter en skalär unity-katalogfunktion. Bäst för omvandlingar på kolumnnivå. Åtkomst styrs av behörigheter för Unity-katalogen. -
uc-udtf: Omsluter en tabellvärdesfunktion i Unity Catalog. Bäst för transformeringar på tabellnivå som ML-klustring och aggregering. Åtkomst styrs av behörigheter för Unity-katalogen.
| Feature | python-run-function |
uc-udf |
uc-udtf |
|---|---|---|---|
| Exempel på användningsfall | DataFrame-transformeringar, API-integreringar, e-postmeddelanden | Beräkningar på kolumnnivå (BMI, räntor) | ML-klustring, aggregering över rader |
| Input | DataFrames | Enkla värden | Hela tabellen, rad för rad |
| Output | DataFrames | Enskilt värde | Tabell (flera rader) |
| Kräver unity catalog-funktion | No | Yes | Yes |
| Åtkomststyrning | Filbehörigheter för arbetsyta | Behörigheter för Unity-katalogen (EXECUTE, USE SCHEMA) |
Behörigheter för Unity-katalogen (EXECUTE, USE SCHEMA) |
| Språk som stöds | Endast Python | SQL eller Python i en SQL-omslutning | SQL eller Python i en SQL-omslutning |
Så här fungerar användardefinierade operatorer
En användardefinierad operator består av:
-
Operatorlogik: Den kod som körs när operatorn körs. Detta kan vara en infogad funktion Python
run()(förpython-run-function) eller en Unity Catalog-funktion (föruc-udfochuc-udtf). -
YAML-konfiguration: Berättar för Lakeflow Designer hur operatorn ska visas i användargränssnittet, inklusive operatorns namn, beskrivning, indataparametrar, gränssnittswidgetar och portar. Alla operatortyper använder
user-defined-operator-v0.1.0schemat. -
Registreringsfil: En post i
.user_defined_operators.yamlsom gör att Lakeflow Designer kan identifiera operatorn.
Operatorlogik
Python kör användardefinierad operatorlogik för funktionen
Varje python-run-function operator måste definiera en run() funktion:
def run(config: Dict[str, Any], inputs: Dict[str, Any], spark) -> Dict[str, Any]:
-
config: Användarkonfigurerade värden från användargränssnittet, nyckelade efter egenskapsnamn. -
inputs: Indataramar, som styrs av indataportenname. -
spark: Aktiv SparkSession. -
Returnerar: En ordlista som mappar utdataportvärden
nametill DataFrames.
I följande exempel filtreras rader från en indataram:
def run(config, inputs, spark):
df = inputs["in"]
filtered = df.filter(config["filter_expression"])
return {"out": filtered}
Om din operatör kräver externa pip-paket lägger du till fältet environment i YAML:
environment:
environment_version: '4'
dependencies:
- requests==2.31.0
- beautifulsoup4==4.12.0
UDF- och UDTF-operatorlogik
Du kan skriva UC-funktioner i SQL eller Python. Python funktioner omsluts i en SQL CREATE FUNCTION-instruktion:
SQL-funktion:
CREATE OR REPLACE FUNCTION my_catalog.my_schema.calculate_bmi(weight_kg DOUBLE, height_m DOUBLE)
RETURNS DOUBLE
LANGUAGE SQL
RETURN
SELECT weight_kg / (height_m * height_m);
funktionen Python (omsluten i SQL):
CREATE OR REPLACE FUNCTION my_catalog.my_schema.calculate_bmi(weight_kg DOUBLE, height_m DOUBLE)
RETURNS DOUBLE
LANGUAGE PYTHON
AS $$
return weight_kg / (height_m ** 2)
$$;
UDF:er bearbetar ett enskilt värde i taget och returnerar ett beräknat värde. UDTF:er bearbetar tabeller rad för rad och kan bibehålla ett tillstånd mellan alla rader. Används uc-udf för transformeringar på kolumnnivå och uc-udtf för åtgärder som ML-klustring eller sammansättning.
Dessutom kräver UDF:er att du definierar tre viktiga metoder: __init__(), eval()och terminate():
class MyOperator:
def __init__(self):
# Called before processing - initialize any values needed.
def eval(self, row, id_column, columns, k):
# Called one time per input row - accumulate data here.
def terminate(self):
# Called after all rows - perform final calculations and yield results.
Note
UDTF-returtabeller måste ha fasta, explicita typer. Du kan inte referera till indatakolumntyper i returkonfigurationen.
YAML-konfiguration
YAML-konfigurationen talar om för Lakeflow Designer hur operatorn ska presenteras i användargränssnittet. Den definierar operatorns namn, beskrivning, indataparametrar, gränssnittswidgetar och portar. Varje konfigurationsfält är en egenskap med en typ, rubrik och valfria x-ui widgettips:
config:
type: object
properties:
my_param:
type: string
title: My Parameter
x-ui:
widget: input
my_expression:
type: string
title: Column
format: expression
x-ui:
widget: expression
port: in
my_number:
type: number
title: Count
default: 10
minimum: 0
maximum: 100
required:
- my_param
- my_expression
Fullständig information om YAML-schemat, inklusive alla widgettyper och konfigurationsalternativ, finns i Användardefinierad YAML-referens för operatorn.
Hamnar
Portar definierar indata och utdata för operatorn:
ports:
input:
- name: in
title: Input Data
mime: application/vnd.databricks.dataframe
required: true
allowMultiple: false
output:
- name: out
title: Output Data
YAML för Python kör funktionsoperatorer
För operatorerna python-run-function är YAML-filen fristående och innehåller ett run_function-fält med infogad Python kod:
schema: user-defined-operator-v0.1.0
type: python-run-function
name: Filter Rows
id: filter_rows
version: '1.0.0'
description: Filters rows based on a SQL expression.
config:
type: object
properties:
filter_expression:
type: string
title: Filter Expression
x-ui:
widget: input
required:
- filter_expression
ports:
input:
- name: in
title: Input
output:
- name: out
title: Output
run_function:
type: inline
code: |
def run(config, inputs, spark):
df = inputs["in"]
filtered = df.filter(config["filter_expression"])
return {"out": filtered}
YAML för Unity Catalog-funktioner
För UC-baserade operatorer bäddar du in YAML-konfigurationen som en kommentar eller dokumentsträng i din funktion.
I SQL (använd /* ... */ kommentar):
RETURN(/*
schema: user-defined-operator-v0.1.0
type: uc-udf
name: Calculate BMI
id: calculate_bmi
version: "1.0.0"
description: Calculates BMI from weight and height.
config:
type: object
properties:
weight_kg:
type: string
title: Weight (in kg)
format: expression
x-ui:
widget: expression
port: in
height_m:
type: string
title: Height (in meters)
format: expression
x-ui:
widget: expression
port: in
required:
- weight_kg
- height_m
ports:
input:
- name: in
title: Input Data
output:
- name: out
title: Output
*/
SELECT weight_kg / (height_m * height_m)
);
In Python (använd """ ... """ docstring):
AS $$
"""
schema: user-defined-operator-v0.1.0
type: uc-udf
name: Calculate BMI
id: calculate_bmi
version: "1.0.0"
description: Calculates BMI from weight and height.
config:
type: object
properties:
weight_kg:
type: string
title: Weight (in kg)
format: expression
x-ui:
widget: expression
port: in
height_m:
type: string
title: Height (in meters)
format: expression
x-ui:
widget: expression
port: in
required:
- weight_kg
- height_m
ports:
input:
- name: in
title: Input Data
output:
- name: out
title: Output
"""
return weight_kg / (height_m ** 2)
$$;
Registrera och distribuera din operatör till Lakeflow Designer
För att operatorn ska visas i Lakeflow Designer registrerar du den i en .user_defined_operators.yaml fil:
- Arbetsytenivå: Placera filen i arbetsytans rot för att göra operatorn synlig för alla användare.
-
Användarnivå: Placera filen i användarens hemmapp (
/Workspace/Users/<user-name>/.user_defined_operators.yaml) för att göra operatorerna synliga endast för dig.
Avsnittet operators: stöder filsökvägar, funktionsreferenser för Unity Catalog och globmönster. Du kan blanda posttyper:
operators:
# File path (python-run-function operators)
- /Workspace/Users/me/udos/my_operator.yaml
# Glob pattern (registers all matching files)
- /Workspace/Users/me/udos/transforms/*.yaml
# UC function reference (uc-udf and uc-udtf operators)
- catalog: my_catalog
schema: my_schema
functionName: my_function
Uppdatera eller ta bort en operator
När du ändrar koden för en operator uppdaterar du dina användardefinierade operatorer så att ändringen läses in. På fliken Operatorer på menyn klickar du på .
- Om operatören behåller samma
versionläses den uppdaterade koden in vid uppdatering. - Om operatorn har en ny
versionuppmanar operatorn på arbetsytan dig att uppgradera till den (eller behålla den aktuella versionen) när du har uppdaterat.
Om du vill ta bort en operatör från Lakeflow Designer tar du bort posten från .user_defined_operators.yaml. För operatorerna uc-udf och uc-udtf kan du också ta bort den underliggande Unity Catalog-funktionen med DROP FUNCTION om du inte längre behöver den.
Avancerade konfigurationer
Förhandsgranskningsläge
Lakeflow Designer stöder förhandsversioner i designläge. För operatorer som anropar externa API:er eller skriver till externa system lägger du till en is_preview konfigurationsegenskap så att du kan hoppa över biverkningar under förhandsversionen. När förhandsgranskningsläget är aktiverat måste användarna uttryckligen klicka på Kör för att köra operatorn med biverkningar.
config:
type: object
properties:
is_preview:
type: boolean
format: is_preview
default: false
Lakeflow Designer anger automatiskt det här värdet till true under förhandsversionen. Kontrollera det i logiken för att hoppa över biverkningar:
# In a python-run-function
if config.get("is_preview"):
return {"out": inputs["in"]}
# In a UC function (SQL)
CASE WHEN is_preview THEN 'preview' ELSE /* actual work */ END
Anslutningar i Unity-katalogen
För UC-baserade SQL-operatorer som anropar externa API:er använder du HTTP-anslutningar i Unity Catalog för att lagra autentiseringsuppgifter på ett säkert sätt:
CREATE CONNECTION my_api_connection TYPE HTTP OPTIONS (
host 'https://api.example.com',
port '443',
base_path '/v1/',
bearer_token 'your-token-here'
);
Använd sedan anslutningen i din SQL UDF med http_request() funktionen . Mer information finns i Ansluta till externa HTTP-tjänster.
Arbetsyteklient
För operatorerna python-run-function kan du använda Azure Databricks WorkspaceClient för att komma åt arbetsyteresurser och externa API:er:
def run(config, inputs, spark):
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
# Use w to access workspace resources
Skapa en komplett användardefinierad operator för python-run-function
Följande steg beskriver hur du skapar en python-run-function operator från grunden.
Steg 1: Definiera logiken
Skriv din run() funktion i en notebook-fil:
from typing import Dict, Any
def run(config: Dict[str, Any], inputs: Dict[str, Any], spark) -> Dict[str, Any]:
from pyspark.sql import functions as F
df = inputs["in"]
result = df.withColumn(config["column_name"], F.current_timestamp())
return {"out": result}
Steg 2: Testa funktionen
Testa funktionen interaktivt med exempeldata:
test_df = spark.createDataFrame(
[("Alice", 100), ("Bob", 200)],
["name", "amount"]
)
result = run(
config={"column_name": "processed_at"},
inputs={"in": test_df},
spark=spark
)
result["out"].show()
Steg 3: Skapa YAML-konfigurationen
Definiera operatormetadata, konfigurationsfält och portar i en YAML-fil:
schema: user-defined-operator-v0.1.0
type: python-run-function
name: Add Timestamp
id: transforms.add_timestamp
version: '1.0.0'
description: Adds a timestamp column to the input DataFrame.
config:
type: object
properties:
column_name:
type: string
title: Column Name
default: processed_at
x-ui:
widget: input
required:
- column_name
Steg 4: Kombinera logiken och YAML
Lägg till fälten run_function och ports för att skapa den fullständiga YAML-filen. Spara den på din arbetsyta, till exempel /Workspace/Users/<user-name>/udos/add_timestamp.yaml:
schema: user-defined-operator-v0.1.0
type: python-run-function
name: Add Timestamp
id: transforms.add_timestamp
version: '1.0.0'
description: Adds a timestamp column to the input DataFrame.
config:
type: object
properties:
column_name:
type: string
title: Column Name
default: processed_at
x-ui:
widget: input
required:
- column_name
ports:
input:
- name: in
title: Input
output:
- name: out
title: Output
run_function:
type: inline
code: |
from typing import Dict, Any
def run(config: Dict[str, Any], inputs: Dict[str, Any], spark) -> Dict[str, Any]:
from pyspark.sql import functions as F
df = inputs["in"]
result = df.withColumn(config["column_name"], F.current_timestamp())
return {"out": result}
Steg 5: Registrera operatorn
Lägg till filsökvägen i din .user_defined_operators.yaml-fil:
operators:
- /Workspace/Users/<user-name>/udos/add_timestamp.yaml
Steg 6: Använd operatorn i Lakeflow Designer
Öppna Lakeflow Designer och kontrollera att operatorn visas i operatorpaletten. Dra den till ritytan, anslut en inmatning, konfigurera kolumnnamnet och kör en förhandsgranskning.
Skapa en fullständig användardefinierad UC-operator
Följande steg beskriver hur du skapar en UC-baserad uc-udf operator.
Steg 1: Definiera logiken
Skriva och testa funktionslogik i en notebook-fil:
def double_value(input_value: float) -> float:
if input_value is None:
return None
return input_value * 2
Steg 2: Skapa YAML-konfigurationen
Definiera operatormetadata, konfigurationsfält och portar:
schema: user-defined-operator-v0.1.0
type: uc-udf
name: Double Value
id: math.double_value
version: '1.0.0'
description: Doubles the input value
config:
type: object
properties:
input_value:
type: string
title: Input Value
format: expression
x-ui:
widget: expression
port: input_data
required:
- input_value
ports:
input:
- name: input_data
title: Input
output:
- name: out
title: Output
Steg 3: Kombinera logiken och YAML
Skapa Unity Catalog-funktionen med YAML inbäddad som docstring:
CREATE OR REPLACE FUNCTION main.my_schema.double_value(input_value DOUBLE)
RETURNS DOUBLE
LANGUAGE PYTHON
AS $$
"""
schema: user-defined-operator-v0.1.0
type: uc-udf
name: Double Value
id: math.double_value
version: "1.0.0"
description: Doubles the input value
config:
type: object
properties:
input_value:
type: string
title: Input Value
format: expression
x-ui:
widget: expression
port: input_data
required:
- input_value
ports:
input:
- name: input_data
title: Input
output:
- name: out
title: Output
"""
def double_value(input_value: float) -> float:
if input_value is None:
return None
return input_value * 2
return double_value(input_value)
$$
Steg 4: Testa funktionen
SELECT main.my_schema.double_value(5) AS result;
-- Should return: 10
Steg 5: Registrera operatorn
Lägg till funktionsreferensen för Unity Catalog i .user_defined_operators.yaml filen:
operators:
- catalog: main
schema: my_schema
functionName: double_value
Steg 6: Använd operatorn i Lakeflow Designer
Öppna Lakeflow Designer och kontrollera att operatorn visas i operatorpaletten. Dra den till arbetsytan, anslut en ingång och kör en förhandsgranskning.
Troubleshooting
| Issue | Lösning |
|---|---|
| Operatorn visas inte i Lakeflow Designer. | Kontrollera att .user_defined_operators.yaml finns och listar din funktion eller filsökväg. För python-run-function operatorer kontrollerar du filsökvägen och att YAML-filen är tillgänglig. |
| Schemaverifieringen misslyckas. | Verifiera din YAML mot det officiella schemat på https://your-workspace.cloud.databricks.com/static/schemas/user-defined-operator-v0.1.0.json. |
| Behörighet nekad. | För UC-baserade operatorer kontrollerar du att användarna har EXECUTE på funktionen och USE SCHEMA i schemat. För python-run-function operatorer kontrollerar du att användarna har läsbehörighet till YAML-filen. |
python-run-function operator misslyckas under körning. |
Kontrollera att funktionssignaturen run() matchar def run(config, inputs, spark). Kontrollera att portnamnen i koden matchar YAML och att returordlistans nycklar matchar portvärden för utdata name . |
| UDTF returnerar fel typer. | UDTF-returtyper måste vara explicita. Du kan inte referera till kolumntyper för indata. |
Permissions
| Tillåtelse | Purpose |
|---|---|
Läsbehörighet till .user_defined_operators.yaml. |
Identifiera operatorn. |
Läsbehörighet till YAML-filen (python-run-function endast). |
Läs in operatordefinitionen. |
| KÖR på unity catalog-funktionen (endast UC-baserade operatorer). | Kör operatören. |
| USE SCHEMA i schemat (endast UC-baserade operatorer). | Få åtkomst till schemat där funktionen skapas. |
| Andra behörigheter | Beroende på din operatör kan användare kräva andra behörigheter. Till exempel USE CONNECTION på en Unity Catalog-anslutning för HTTP API-anrop. |
Ytterligare resurser
Utforska följande självstudiekurser:
| Example | Type | Description |
|---|---|---|
| Gmail-e-postsändare | python-run-function |
Skicka DataFrame-data som en CSV-e-postbilaga via Gmail. |
| Kalkylator för sammansatt ränta | uc-udf |
Beräkna framtida investeringsvärden med hjälp av formeln för sammansatt ränta. |
| K-means-klustring | uc-udtf |
Segmentera data i kluster med scikit-learn. |
| Skicka Slack-meddelande | uc-udf |
Skicka meddelanden till Slack-kanaler via API. |
| Alla gränssnittskomponenter | uc-udf |
Referensoperator som visar alla tillgängliga UI-widgetar. |
En fullständig referens till YAML-schemat finns i Användardefinierad operatörs YAML-referens.