Door de gebruiker gedefinieerde functies (UDF's) in Unity Catalog

Belangrijk

Deze functie bevindt zich in openbare preview en vereist Databricks Runtime 13.3 LTS en hoger.

Azure Databricks biedt een systeemeigen SQL-syntaxis voor het registreren van aangepaste functies voor schema's die worden beheerd door Unity Catalog. De standaard-SQL-syntaxis CREATE FUNCTION wordt ondersteund voor alle Unity Catalog-berekeningen in Azure Databricks. Op pro- of serverloze SQL-warehouses en in Databricks Runtime 13.3 LTS en hoger kunt u Python-code opnemen in functies die zijn geregistreerd bij Unity Catalog.

Notitie

Weergaven die zijn geregistreerd bij query's die gebruikmaken van UDF's, moeten ondersteunde berekeningen gebruiken. Klassieke SQL-warehouses en Databricks Runtime 12.2 LTS en hieronder kunnen geen weergaven oplossen die UDF's bevatten die zijn geregistreerd bij Unity Catalog.

Zie CREATE FUNCTION (SQL en Python) voor de volledige naslaginformatie over DE SQL-taal.

Zie CREATE FUNCTION voor informatie over hoe Unity Catalog machtigingen voor functies beheert.

Belangrijk

Python UDF's die zijn geregistreerd als functies in Unity Catalog verschillen in bereik en ondersteuning van PySpark UDF's die zijn gericht op een notebook of SparkSession. Zie door de gebruiker gedefinieerde scalaire functies - Python.

Aangepaste SQL-functies in Unity Catalog

Wanneer u een SQL-functie maakt die is geconfigureerd voor Unity Catalog, wordt de functie standaard geregistreerd bij het huidige actieve schema. In het volgende voorbeeld ziet u de syntaxis die u kunt gebruiken om een doelcatalogus en schema voor een nieuwe functie te declareren:

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 gebruikers met voldoende bevoegdheden voor de functie kunnen vervolgens de functie gebruiken in rekenomgevingen die zijn geconfigureerd voor Unity Catalog, zoals in het volgende voorbeeld:

SELECT target_catalog.target_schema.roll_dice()

Notitie

U KUNT UDF's LANGUAGE SQL gebruiken om tabellen of scalaire waarden te retourneren.

Een Python UDF registreren bij Unity Catalog

In Databricks Runtime 13.3 LTS en hoger kunt u de SQL-instructie CREATE FUNCTION gebruiken om scalaire Python UDF's te registreren bij Unity Catalog.

Belangrijk

Alleen pro- en serverloze SQL-warehouses ondersteunen Python UDF's voor Unity Catalog.

Python UDF's zijn ontworpen om de volledige expressiviteit van Python rechtstreeks in SQL-functies te bieden, waardoor aangepaste bewerkingen, zoals geavanceerde transformaties, gegevensmaskering en hashing, mogelijk zijn.

Python UDF's worden uitgevoerd in een beveiligde, geïsoleerde omgeving en hebben geen toegang tot bestandssystemen of interne services.

Python UDF's die worden uitgevoerd op serverloze berekeningen of in de modus voor gedeelde toegang staan TCP/UDP-netwerkverkeer toe via poorten 80, 443 en 53.

Zie welke UDF's het efficiëntst zijn?

Notitie

Syntaxis en semantiek voor Python UDF's in Unity Catalog verschillen van Python UDF's die zijn geregistreerd bij SparkSession. Zie door de gebruiker gedefinieerde scalaire functies - Python.

Python UDF's voor Unity Catalog gebruiken instructies die zijn ingesteld op dubbele dollartekens ($$), zoals in het volgende codevoorbeeld:

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

In het volgende voorbeeld ziet u hoe u deze functie gebruikt om begroetingsinstructies te retourneren voor alle namen die zijn opgeslagen in de first_name kolom van een tabel met de naam students:

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

U kunt een willekeurig aantal Python-functies definiëren binnen een Python UDF, maar moet een scalaire waarde retourneren.

Python-functies moeten onafhankelijk van elkaar waarden verwerken NULL en alle typetoewijzingen moeten azure Databricks SQL-taaltoewijzingen volgen.

U kunt standaard Python-bibliotheken importeren die zijn opgenomen in Azure Databricks, maar u kunt geen aangepaste bibliotheken of externe afhankelijkheden opnemen.

Als er geen catalogus of schema is opgegeven, worden Python UDF's geregistreerd bij het huidige actieve schema.

In het volgende voorbeeld wordt een bibliotheek geïmporteerd en worden meerdere functies binnen een Python UDF gebruikt:

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)
$$