Condividi tramite


Funzioni definite dall'utente (UDF) nel catalogo unity

Importante

Questa funzionalità è disponibile in anteprima pubblica.

Azure Databricks fornisce una sintassi nativa di SQL per registrare funzioni personalizzate in schemi regolati da Unity Catalog. Le funzioni definite dall'utente Python registrate come funzioni nel catalogo unity differiscono nell'ambito e nel supporto dalle funzioni definite dall'utente pySpark con ambito a un notebook o sparkSession. Vedere Funzioni scalari definite dall'utente - Python.

Per informazioni di riferimento complete sul linguaggio SQL, vedere CREATE FUNCTION (SQL e Python).

Per informazioni su come Il catalogo Unity gestisce le autorizzazioni per le funzioni, vedere CREATE FUNCTION.

Requisiti

  • Databricks Runtime 13.3 LTS o versione successiva.
  • Per usare il codice Python nelle funzioni definite dall'utente registrate in Unity Catalog, è necessario usare un serverless o pro SQL Warehouse o un cluster che esegue Databricks Runtime 13.3 LTS o versione successiva.
  • Per risolvere le visualizzazioni create usando una funzione definita dall'utente registrata nel catalogo unity, è necessario usare un serverless o pro SQL Warehouse.

Funzioni SQL personalizzate nel catalogo unity

Quando si crea una funzione SQL usando il calcolo configurato per il catalogo Unity, la funzione viene registrata nello schema attualmente attivo per impostazione predefinita. L'esempio seguente illustra la sintassi che è possibile usare per dichiarare un catalogo di destinazione e uno schema per una nuova funzione:

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;

Tutti gli utenti con privilegi sufficienti per la funzione possono quindi usare la funzione negli ambienti di calcolo configurati per Unity Catalog, come nell'esempio seguente:

SELECT target_catalog.target_schema.roll_dice()

Nota

È possibile usare funzioni definite dall'utente usando LANGUAGE SQL per restituire tabelle o valori scalari.

Registrare una funzione definita dall'utente Python nel catalogo unity

In Databricks Runtime 13.3 LTS e versioni successive è possibile usare l'istruzione SQL CREATE FUNCTION per registrare funzioni definite dall'utente Python scalari nel catalogo unity.

Importante

Solo i data warehouse pro e serverless supportano le funzioni definite dall'utente Python per il catalogo unity.

Le funzioni definite dall'utente Python sono progettate per offrire l'espressività completa di Python direttamente all'interno di funzioni SQL, consentendo operazioni personalizzate come trasformazioni avanzate, maschera dati e hashing.

Le funzioni definite dall'utente Python vengono eseguite in un ambiente protetto e isolato e non hanno accesso ai file system o ai servizi interni.

Le funzioni definite dall'utente Python in esecuzione nel calcolo serverless o in modalità di accesso condiviso consentono il traffico di rete TCP/UDP sulle porte 80, 443 e 53.

Vedere Quali funzioni definite dall'utente sono più efficienti?.

Nota

La sintassi e la semantica per le funzioni definite dall'utente Python nel catalogo unity differiscono dalle funzioni definite dall'utente Python registrate in SparkSession. Vedere Funzioni scalari definite dall'utente - Python.

Le funzioni definite dall'utente Python per il catalogo Unity usano istruzioni impostate da segni di dollaro doppio ($$), come nell'esempio di codice seguente:

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

Nell'esempio seguente viene illustrato l'uso di questa funzione per restituire istruzioni greeting per tutti i nomi archiviati nella first_name colonna di una tabella denominata students:

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

È possibile definire un numero qualsiasi di funzioni Python all'interno di una funzione definita dall'utente Python, ma deve restituire un valore scalare.

Le funzioni Python devono gestire NULL i valori in modo indipendente e tutti i mapping dei tipi devono seguire i mapping del linguaggio SQL di Azure Databricks.

È possibile importare librerie Python standard incluse in Azure Databricks, ma non è possibile includere librerie personalizzate o dipendenze esterne.

Se non viene specificato alcun catalogo o schema, le funzioni definite dall'utente Python vengono registrate nello schema attivo corrente.

L'esempio seguente importa una libreria e usa più funzioni all'interno di una funzione definita dall'utente Python:

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