Funções definidas pelo usuário (UDFs) no Unity Catalog
Importante
Este recurso está em Public Preview e requer o site Databricks Runtime 13.3 LTS e acima.
Databricks fornece uma sintaxe nativa do SQL para registrar funções personalizadas em esquemas regidos por Unity Catalog. A sintaxe padrão CREATE FUNCTION
SQL é suportada para todos os Unity Catalog compute em Databricks. No pro ou serverless SQL warehouse e em Databricks Runtime 13.3 LTS e acima, o senhor pode incluir o código Python em funções registradas em Unity Catalog.
As instâncias Graviton não oferecem suporte a UDFs em clusters habilitados para Unity Catalog.
Observação
A visualização registrada a partir de consultas que usam UDFs deve usar compute. Armazém SQL clássico e Databricks Runtime 12.2 LTS e abaixo não conseguem resolver a visualização que contém UDFs registrados em Unity Catalog.
Para obter a referência completa da linguagem SQL, consulte CREATE FUNCTION (SQL e Python).
Para obter informações sobre como o Unity Catalog gerencia permissões em funções, consulte CREATE FUNCTION.
Importante
As UDFs do Python registradas como funções no Unity Catalog diferem em escopo e suporte das UDFs do PySpark com escopo para um Notebook ou SparkSession. Consulte Funções escalares definidas pelo usuário - Python.
Importante
UDFs e UDAFs não são suportados em clusters Graviton configurados com modo de acesso compartilhado e Unity Catalog.
Funções SQL personalizadas no Unity Catalog
Quando você cria uma função SQL usando compute configurada para Unity Catalog, a função é registrada no esquema atualmente ativo por default. O exemplo a seguir demonstra a sintaxe que você pode usar para declarar um catálogo de destino e um esquema para uma nova função:
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;
Todos os usuários com privilégios suficientes na função podem usar a função em ambientes compute configurados para o Unity Catalog, como no exemplo a seguir:
SELECT target_catalog.target_schema.roll_dice()
Observação
Você pode usar UDFs usando LANGUAGE SQL
para retornar tabelas ou valores escalares.
registrar um Python UDF no Unity Catalog
Em Databricks Runtime 13.3 LTS e acima, o senhor pode usar a instrução SQL CREATE FUNCTION
para registrar UDFs escalares Python em Unity Catalog.
Importante
Apenas SQL warehouse profissional e serverless oferece suporte a UDFs Python para Unity Catalog.
Os UDFs do Python são projetados para fornecer a expressividade total do Python diretamente nas funções SQL, permitindo operações personalizadas, como transformações avançadas, mascaramento de dados e hash.
As UDFs do Python são executadas em um ambiente seguro e isolado e não têm acesso a sistemas de arquivos ou serviços internos.
UDFs Python executados serverless compute em ou em modo de acesso compartilhado permitem tráfego de rede TCP/UDP nas portas 80, 443 e 53.
Consulte Quais UDFs são mais eficientes?.
Observação
A sintaxe e a semântica para UDFs do Python no Unity Catalog são diferentes das UDFs do Python registradas na SparkSession. Consulte Funções escalares definidas pelo usuário - Python.
As UDFs do Python para Unity Catalog usam instruções definidas por cifrões duplos ($$
), como no exemplo de código a seguir:
CREATE FUNCTION target_catalog.target_schema.greet(s STRING)
RETURNS STRING
LANGUAGE PYTHON
AS $$
return f"Hello, {s}"
$$
O exemplo a seguir demonstra o uso dessa função para retornar instruções de saudação para todos os nomes armazenados na coluna first_name
de uma tabela chamada students
:
SELECT target_catalog.target_schema.greet(first_name)
FROM students;
Você pode definir qualquer número de funções Python em uma UDF Python, mas deve retornar um valor escalar.
As funções do Python devem manipular valores NULL
independentemente e todos os mapeamentos de tipo devem seguir os mapeamentos de linguagem SQL do Databricks.
Você pode importar bibliotecas Python padrão incluídas pelo Databricks, mas não pode incluir bibliotecas personalizadas ou dependências externas.
Se nenhum catálogo ou esquema for especificado, as UDFs do Python serão registradas no esquema ativo atual.
O exemplo a seguir importa uma biblioteca e usa várias funções em uma UDF do 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)
$$