NotebookUtils User Data Function (UDF)-Hilfsprogramme für Fabric

Das notebookutils.udf Modul bietet Hilfsprogramme zum Integrieren von Notizbuchcode in UDF-Elemente (User Data Function). Sie können auf Funktionen aus einem UDF-Element innerhalb desselben Arbeitsbereichs oder in verschiedenen Arbeitsbereichen zugreifen und diese Funktionen dann nach Bedarf aufrufen. UDF-Elemente fördern die Wiederverwendbarkeit von Code, die zentrale Wartung und die Teamzusammenarbeit.

Verwenden Sie UDF-Hilfsprogramme, um:

  • Funktionsabruf – Zugriff auf Funktionen aus UDF-Elementen anhand des Namens.
  • Arbeitsbereichübergreifender Zugriff – Verwenden von Funktionen aus UDF-Elementen in anderen Arbeitsbereichen.
  • Funktionsermittlung – Überprüfen der verfügbaren Funktionen und deren Signaturen.
  • Flexibles Aufrufen – Aufrufen von Funktionen mit sprachgerechten Parametern.

Hinweis

Sie benötigen Lesezugriff auf ein UDF-Element im Zielarbeitsbereich, um seine Funktionen abzurufen. Ausnahmen von UDF-Funktionen werden an das aufrufende Notizbuch weitergegeben.

In der folgenden Tabelle sind die verfügbaren UDF-Methoden aufgeführt:

Methode Signature Beschreibung
getFunctions getFunctions(udf: String, workspaceId: String = ""): UDF Ruft alle Funktionen aus einem UDF-Element anhand der Artefakt-ID oder des Namens ab. Gibt ein Objekt mit aufrufbaren Funktionsattributen zurück.

Das zurückgegebene Objekt macht die folgenden Eigenschaften verfügbar:

Eigentum Typ Beschreibung
functionDetails List Eine Liste der Funktionsmetadatenverzeichnisse. Jedes Wörterbuch enthält: Name (Funktionsname), Description (Funktionsbeschreibung), Parameters (Liste der Parameterdefinitionen), FunctionReturnType (Rückgabetyp) und DataSourceConnections (verwendete Datenquellenverbindungen).
itemDetails Wörterbuch Ein Wörterbuch mit UDF-Elementmetadaten mit Schlüsseln: Id (Artefakt-ID), Name (Elementname), WorkspaceId (Arbeitsbereichs-ID) und CapacityId (Kapazitäts-ID).
<functionName> Aufrufbar Jede Funktion im UDF-Element wird zu einer aufrufbaren Methode für das zurückgegebene Objekt. Verwenden Sie myFunctions.functionName(...), um es aufzurufen.

Tipp

Rufen Sie UDF-Funktionen einmal ab und zwischenspeichern Sie das Wrapperobjekt. Vermeiden Sie wiederholtes Aufrufen getFunctions() in einer Schleife – speichern Sie das Ergebnis stattdessen zwischen, um den Aufwand zu minimieren.

Abrufen von Funktionen aus einer benutzerdefinierten Funktion (UDF)

Verwenden Sie notebookutils.udf.getFunctions(), um alle Funktionen von einem UDF-Element abzurufen. Optional können Sie eine Arbeitsbereichs-ID für den arbeitsbereichübergreifenden Zugriff angeben.

# Get functions from a UDF item in the current workspace
myFunctions = notebookutils.udf.getFunctions('UDFItemName')

# Get functions from a UDF item in another workspace
myFunctions = notebookutils.udf.getFunctions('UDFItemName', 'workspaceId')

Eine Funktion aufrufen

Rufen Sie nach dem Abrufen von Funktionen aus einem UDF-Element diese mit ihrem Namen auf. Python unterstützt Positions- und benannte Parameter. Skala- und R-Beispiele verwenden Positionsparameter.

# Positional parameters
myFunctions.functionName('value1', 'value2')

# Named parameters (recommended for clarity)
myFunctions.functionName(parameter1='value1', parameter2='value2')

Standardwerte für Parameter

Fabric Benutzerdatenfunktionen unterstützen Standardargumentwerte. Wenn Sie funktionen aufrufen, die über notebookutils.udf.getFunctionsabgerufen werden, kann jeder Parameter, der einen definierten Standardwert aufweist, weggelassen werden – die Laufzeit verwendet automatisch den Standardwert. Sie können auch benannte Argumente angeben, um bestimmte Standardwerte außer Kraft zu setzen, während andere an ihren Standardwerten verbleiben.

# Assume the UDF item defines a function like:
# def score_customer(customerId: str, startDate: datetime = "2025-01-01T00:00:00Z", isActive: bool = True, maxRecords: int = 100) -> dict
# The datetime defaults are specified as strings in the signature; the runtime parses them to datetime at invocation time.

# 1. Call without optional parameters — defaults are used for startDate, isActive, and maxRecords
result = myFunctions.scoreCustomer(customerId='C001')

# 2. Override one default via a named argument, keep the others at their defaults
result = myFunctions.scoreCustomer(customerId='C001', maxRecords=50)

# 3. Pass a date/time in ISO 8601 format for reliable parsing
result = myFunctions.scoreCustomer(customerId='C001', startDate='2025-12-31T23:59:59Z')

Unterstützte Standardeingabetypen

Die folgenden Typen werden als Standardwerte unterstützt:

Standardtyp Notes
String Eine beliebige JSON-serialisierbare Zeichenfolge.
Datum-Zeit-String Geben Sie als Zeichenfolge in der Funktionssignatur an. Die Laufzeit parst sie zu datetime zur Aufrufzeit. Verwenden Sie ein einheitliches Format wie ISO 8601 (z. B 2025-12-31T23:59:59Z. ).
Boolean True oder False.
Integer Ein ganzzahliger Wert.
Float Ein beliebiger Gleitkommawert.
List Muss JSON-serialisierbar sein; verwenden Sie vorzugsweise None in der Signatur und weisen Sie innerhalb der Funktion zu, um Probleme mit veränderbaren Standardwerten zu vermeiden.
Wörterbuch Muss JSON-serialisierbar sein; in der Signatur sollte None bevorzugt werden, und es sollte innerhalb der Funktion zugewiesen werden.
Pandas DataFrame Bereitgestellt als JSON-Objekt, das das SDK in einen pandas-Typ konvertiert. Erfordert fabric-user-data-functions Version 1.0.0 oder höher.
Pandas Serie Bereitgestellt als JSON-Array von Objekten, die das SDK in einen Pandas-Typ konvertiert. Erfordert fabric-user-data-functions Version 1.0.0 oder höher.

Einschränkungen und Anleitungen

Standardwerte müssen JSON-serialisierbar sein (Sätze und Tupel werden nicht unterstützt). Verwenden Sie None für Listen- oder Wörterbuchstandardwerte in der Signatur und weisen Sie innerhalb der Funktion den tatsächlichen Standardwert zu, um freigegebene änderbare Standardwerte zu vermeiden. Verwenden Sie das ISO 8601-Format (z. B. 2025-12-31T23:59:59Z) für Standardwerte von Datum und Uhrzeit. Die Verwendung von Pandas DataFrame oder Series als Standard erfordert fabric-user-data-functions Version 1.0.0 oder höher.

Details anzeigen

Sie können UDF-Elementmetadaten und Funktionssignaturen programmgesteuert prüfen.

Anzeigen von UDF-Element-Details

display(myFunctions.itemDetails)

Anzeigen von Funktionsdetails

display(myFunctions.functionDetails)

Tipp

Überprüfen Sie immer functionDetails, wenn Sie mit einem neuen UDF-Element arbeiten. Auf diese Weise können Sie verfügbare Funktionen und deren erwartete Parametertypen vor dem Aufruf überprüfen.

Fehlerbehandlung

Umschließen Sie UDF-Aufrufe in der sprachgerechten Fehlerbehandlung, um fehlende Funktionen oder unerwartete Parametertypen ordnungsgemäß zu verwalten. Stellen Sie immer sicher, dass eine Funktion im UDF-Element vorhanden ist, bevor Sie sie aufrufen.

import json

try:
    validators = notebookutils.udf.getFunctions('DataValidators')

    # Check if function exists before calling
    functions_info = json.loads(validators.functionDetails)
    function_names = [f['Name'] for f in functions_info]

    if 'validateSchema' in function_names:
        is_valid = validators.validateSchema(
            schema='sales_schema',
            data_path='Files/data/sales.csv'
        )
        print(f"Schema validation: {'passed' if is_valid else 'failed'}")
    else:
        print("validateSchema function not available in this UDF item")
        print(f"Available functions: {', '.join(function_names)}")

except AttributeError as e:
    print(f"Function not found: {e}")
except TypeError as e:
    print(f"Parameter type mismatch: {e}")
except Exception as e:
    print(f"Error invoking UDF: {e}")

Verwenden von UDF-Funktionen in einer Datenpipeline

Sie können UDF-Funktionen erstellen, um wiederverwendbare ETL-Schritte zu erstellen:

etl_functions = notebookutils.udf.getFunctions('ETLUtilities')

df = spark.read.csv('Files/raw/sales.csv', header=True)
cleaned_df = etl_functions.removeOutliers(df, columns=['amount'])
enriched_df = etl_functions.addCalculatedColumns(cleaned_df)
validated_df = etl_functions.validateAndFilter(enriched_df)

validated_df.write.mode('overwrite').parquet('Files/processed/sales.parquet')
print("ETL pipeline completed using UDF functions")

Von Bedeutung

UDF-Aufrufe haben Mehraufwand. Wenn Sie dieselbe Funktion mit denselben Parametern wiederholt aufrufen, sollten Sie das Ergebnis zwischenspeichern. Vermeiden Sie nach Möglichkeit das Aufrufen von UDF-Funktionen in engen Schleifen.