Sdílet prostřednictvím


Uživatelem definované funkce (UDF) v katalogu Unity

Důležité

Tato funkce je ve verzi Public Preview.

Azure Databricks poskytuje nativní syntaxi SQL pro registraci vlastních funkcí do schémat, která se řídí katalogem Unity. Uživatelem definované funkce Pythonu zaregistrované jako funkce v katalogu Unity se liší v rozsahu a podpora funkcí PySpark UDF s vymezeným oborem na poznámkový blok nebo SparkSession. Viz uživatelem definované skalární funkce – Python.

Kompletní referenční informace k jazyku SQL najdete v tématu CREATE FUNCTION (SQL a Python).

Informace o tom, jak Katalog Unity spravuje oprávnění k funkcím, naleznete v tématu CREATE FUNCTION.

Požadavky

  • Databricks Runtime 13.3 LTS nebo vyšší
  • Pokud chcete použít kód Pythonu v uživatelem zaregistrovaných v katalogu Unity, musíte použít bezserverový nebo pro SQL Warehouse nebo cluster s Modulem Databricks Runtime 13.3 LTS nebo novějším.
  • Pokud chcete vyřešit zobrazení vytvořená pomocí uživatelem definovaného uživatelem zaregistrovaného v katalogu Unity, musíte použít bezserverový nebo pro SQL Warehouse.

Vlastní funkce SQL v katalogu Unity

Když vytvoříte funkci SQL pomocí výpočetních prostředků nakonfigurovaných pro Unity Catalog, funkce se ve výchozím nastavení zaregistruje do aktuálně aktivního schématu. Následující příklad ukazuje syntaxi, kterou můžete použít k deklaraci cílového katalogu a schématu pro novou funkci:

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;

Všichni uživatelé s dostatečnými oprávněními k funkci pak můžou funkci použít ve výpočetních prostředích nakonfigurovaných pro Katalog Unity, jak je znázorněno v následujícím příkladu:

SELECT target_catalog.target_schema.roll_dice()

Poznámka:

Funkce definované uživatelem LANGUAGE SQL můžete použít k vrácení tabulek nebo skalárních hodnot.

Registrace uživatelem definovaného uživatelem Pythonu do katalogu Unity

Ve službě Databricks Runtime 13.3 LTS a vyšší můžete pomocí příkazu SQL CREATE FUNCTION zaregistrovat skalární uživatelem definované uživatelem Pythonu do katalogu Unity.

Důležité

Pouze profesionální a bezserverové sklady SQL podporují uživatelem definované uživatelem Pythonu pro Katalog Unity.

Funkce definované uživatelem v Pythonu jsou navržené tak, aby poskytovaly plnou výraznost Pythonu přímo v rámci funkcí SQL, což umožňuje přizpůsobené operace, jako jsou pokročilé transformace, maskování dat a hashování.

Funkce definované uživatelem Pythonu se spouštějí v zabezpečeném izolovaném prostředí a nemají přístup k systémům souborů ani interním službám.

V Databricks Runtime 13.3 LTS až 14.2 umožňují definované uživatelem Pythonu spuštěné na bezserverových výpočetních prostředcích nebo v režimu sdíleného přístupu síťový provoz TCP/UDP přes porty 80, 443 a 53.

Podívejte se, které funkce definované uživatelem jsou nejúčinnější?

Poznámka:

Syntaxe a sémantika pro uživatelem definované uživatelem Pythonu v katalogu Unity se liší od funkcí definovaných uživatelem Pythonu zaregistrovaných ve SparkSession. Viz uživatelem definované skalární funkce – Python.

Definované uživatelem Pythonu pro Katalog Unity používají příkazy nastavené dvojitými znaky dolaru ($$), jak je znázorněno v následujícím příkladu kódu:

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

Následující příklad ukazuje použití této funkce k vrácení příkazů s pozdravem pro všechny názvy uložené ve first_name sloupci tabulky s názvem students:

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

Můžete definovat libovolný počet funkcí Pythonu v rámci uživatelem definovaného uživatelem Pythonu, ale musí vrátit skalární hodnotu.

Funkce Pythonu musí zpracovávat NULL hodnoty nezávisle a všechna mapování typů musí následovat po mapování jazyka SQL v Azure Databricks.

Můžete importovat standardní knihovny Pythonu zahrnuté službou Azure Databricks, ale nemůžete zahrnout vlastní knihovny ani externí závislosti.

Pokud není zadán žádný katalog nebo schéma, definované uživatelem Pythonu se zaregistrují do aktuálního aktivního schématu.

Následující příklad naimportuje knihovnu a používá více funkcí v rámci uživatelem definovaného uživatelem Pythonu:

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