Share via


Benutzerdefinierte Funktionen (UDFs) in Unity Catalog

Wichtig

Dieses Feature befindet sich in der Public Preview.

Azure Databricks bietet eine SQL-native Syntax zum Registrieren benutzerdefinierter Funktionen für Schemas, die von Unity Catalog gesteuert werden. Python-UDFs, die in Unity Catalog als Funktionen registriert sind, unterscheiden sich in Umfang und Unterstützung von PySpark-UDFs, die einem Notebook-Bereich oder SparkSession zugeordnet sind. Weitere Informationen finden Sie unter Benutzerdefinierte Skalarfunktionen: Python.

Die vollständige SQL-Sprachreferenz finden Sie unter CREATE FUNCTION (SQL und Python).

Informationen dazu, wie Unity Catalog Berechtigungen für Funktionen verwaltet, finden Sie unter CREATE FUNCTION.

Anforderungen

  • Databricks Runtime 13.3 LTS oder höher.
  • Um Python-Code in UDFs zu verwenden, die im Unity-Katalog registriert sind, müssen Sie ein serverloses oder pro SQL Warehouse oder einen Cluster mit Databricks Runtime 13.3 LTS oder höher verwenden.
  • Um Ansichten aufzulösen, die mit einem im Unity Catalog registrierten UDF erstellt wurden, müssen Sie ein serverloses oder pro SQL Warehouse verwenden.

Benutzerdefinierte SQL-Funktionen in Unity Catalog

Wenn Sie eine SQL-Funktion mithilfe einer für Unity Catalog konfigurierten Computefunktion erstellen, wird die Funktion standardmäßig für das derzeit aktive Schema registriert. Im folgenden Beispiel wird die Syntax veranschaulicht, mit der Sie einen Zielkatalog und ein Schema für eine neue Funktion deklarieren können:

CREATE FUNCTION target_catalog.target_schema.roll_dice()
    RETURNS INT
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    COMMENT 'Roll a single 6 sided die'
    RETURN (rand() * 6)::INT + 1;

Alle Benutzer*innen mit ausreichenden Berechtigungen für die Funktion können die Funktion dann in Computeumgebungen verwenden, die für Unity Catalog konfiguriert sind, wie im folgenden Beispiel gezeigt:

SELECT target_catalog.target_schema.roll_dice()

Hinweis

Sie können UDFs mit LANGUAGE SQL verwenden, um Tabellen oder Skalarwerte zurückzugeben.

Registrieren einer Python-UDF in Unity Catalog

In Databricks Runtime 13.3 LTS und höher können Sie skalare Python-UDFs mit der SQL-Anweisung CREATE FUNCTION bei in Unity Catalog registrieren.

Wichtig

Nur Pro- und serverlose SQL-Warehouses unterstützen Python-UDFs für Unity Catalog.

Python-UDFs sind so konzipiert, dass sie die volle Ausdruckskraft von Python direkt in SQL-Funktionen bereitstellen und benutzerdefinierte Vorgänge wie erweiterte Transformationen, Datenmaskierung und Hashing ermöglichen.

Python-UDFs werden in einer sicheren, isolierten Umgebung ausgeführt und haben keinen Zugriff auf Dateisysteme oder interne Dienste.

Python-UDFs, die unter serverlosem Computing oder im Modus für gemeinsamen Zugriff ausgeführt werden, lassen den Datenverkehr mit TCP oder UDP über die Ports 80, 443 und 53 zu.

Weitere Informationen finden Sie unter Welche UDFs sind am effizientesten?

Hinweis

Syntax und Semantik für Python-UDFs in Unity Catalog unterscheiden sich von Python-UDFs, die für SparkSession registriert sind. Weitere Informationen finden Sie unter Benutzerdefinierte Skalarfunktionen: Python.

Python-UDFs für Unity Catalog verwenden Anweisungen, die zwischen doppelte Dollarzeichen ($$) gesetzt werden, wie im folgenden Codebeispiel gezeigt:

CREATE FUNCTION target_catalog.target_schema.greet(s STRING)
RETURNS STRING
LANGUAGE PYTHON
AS $$
  return f"Hello, {s}"
$$

Das folgende Beispiel veranschaulicht die Verwendung dieser Funktion zum Zurückgeben von Grußanweisungen für alle Namen, die in der Spalte first_name einer Tabelle mit dem Namen students gespeichert sind:

SELECT target_catalog.target_schema.greet(first_name)
FROM students;

Sie können eine beliebige Anzahl von Python-Funktionen innerhalb einer Python-UDF definieren, müssen jedoch einen Skalarwert zurückgeben.

Python-Funktionen müssen NULL-Werte unabhängig behandeln, und alle Typzuordnungen müssen Azure Databricks SQL-Sprachzuordnungen folgen.

Sie können standardmäßige Python-Bibliotheken importieren, die in Azure Databricks enthalten sind. Benutzerdefinierte Bibliotheken oder externe Abhängigkeiten können jedoch nicht einbezogen werden.

Wenn kein Katalog oder Schema angegeben ist, werden Python-UDFs für das aktuelle aktive Schema registriert.

Das folgende Beispiel importiert eine Bibliothek und verwendet mehrere Funktionen innerhalb einer Python-UDF:

CREATE FUNCTION roll_dice(num_dice INTEGER, num_sides INTEGER)
RETURNS INTEGER
LANGUAGE PYTHON
AS $$
  import numpy as np

  def roll_die(num_sides):
    return np.random.randint(num_sides) + 1

  def sum_dice(num_dice,num_sides):
    return sum([roll_die(num_sides) for x in range(num_dice)])

  return sum_dice(num_dice, num_sides)
$$