UDFs (funções definidas pelo usuário) no Catálogo do Unity
Importante
Esse recurso está em Visualização Pública e requer o Databricks Runtime 13.3 LTS e versões superiores.
O Azure Databricks fornece uma sintaxe nativa de SQL para registrar funções personalizadas em esquemas regidos pelo Catálogo do Unity. A sintaxe SQL Padrão CREATE FUNCTION
tem suporte para toda a computação do Catálogo do Unity no Azure Databricks. Em SQL warehouses profissionais ou sem servidor e no Databricks Runtime 13.3 LTS e versões superiores, você pode incluir código Python em funções registradas no Catálogo do Unity.
Observação
As exibições registradas de consultas que usam UDFs devem usar computação com suporte. Os SQL warehouses clássicos e o Databricks Runtime 12.2 LTS e versões anteriores não podem resolver exibições que contenham UDFs registrados no Catálogo do Unity.
Para obter a referência completa da linguagem SQL, consulte CREATE FUNCTION (SQL e Python).
Para obter informações sobre como o Catálogo do Unity gerencia permissões em funções, consulte CREATE FUNCTION.
Importante
As UDFs do Python registradas como funções no Catálogo do Unity diferem no escopo e o suporte de UDFs do PySpark com escopo para um notebook ou SparkSession. Confira Funções escalares definidas pelo usuário – Python.
Funções SQL personalizadas no Catálogo do Unity
Quando você cria uma função SQL usando a computação configurada para o Catálogo do Unity, a função é registrada no esquema ativo no momento por padrão. 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 de computação configurados para o Catálogo do Unity, 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 uma UDF do Python no Catálogo do Unity
No Databricks Runtime 13.3 LTS e posteriores, você pode usar a instrução SQL CREATE FUNCTION
para registrar UDFs escalares do Python no Catálogo do Unity.
Importante
Somente SQL warehouses profissionais e sem servidor dão suporte a UDFs do Python para o Catálogo do Unity.
As UDFs do Python foram projetadas para fornecer toda a expressividade do Python diretamente nas funções SQL, permitindo operações personalizadas, como transformações avançadas, mascaramento de dados e hashing.
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.
As UDFs do Python em execução na computação sem servidor ou no modo de acesso compartilhado permitem o tráfego de rede TCP/UDP nas portas 80, 443 e 53.
Confira Quais UDFs são mais eficientes?.
Observação
A sintaxe e a semântica para UDFs do Python no Catálogo do Unity diferem das UDFs do Python registradas para o SparkSession. Confira Funções escalares definidas pelo usuário – Python.
As UDFs do Python para o Catálogo do Unity usam instruções definidas por sinais de dólar duplo ($$
), 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 como usar essa 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 do Python em uma UDF do Python, mas deve retornar um valor escalar.
As funções do Python devem lidar com NULL
valores de forma independente e todos os mapeamentos de tipo devem seguir os mapeamentos de linguagem SQL do Azure Databricks.
Você pode importar bibliotecas padrão do Python incluídas pelo Azure 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)
$$
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de