As UDFs de Python permitem que você crie uma camada de abstração de lógica personalizada para simplificar a construção de query. Mas e se você quiser aplicar uma lógica complexa, como executar um modelo grande ou detectar padrões de forma eficiente em várias linhas da sua tabela?
Apresentamos anteriormente as Funções de Tabela Definidas pelo Usuário (UDTFs) em Python com escopo de sessão para oferecer suporte a uma lógica de query personalizada mais poderosa. As UDTFs permitem que você faça a execução de uma lógica robusta e com estado (stateful) em Python em tabelas inteiras, facilitando a solução de problemas que normalmente são difíceis em SQL puro.
Processe qualquer dataset com flexibilidade
A palavra-chave declarativa TABLE() permite que você direcione qualquer tabela, view ou até mesmo uma subconsulta dinâmica diretamente para sua UDTF. Isso transforma sua função em um bloco de construção poderoso e reutilizável para qualquer fatia de seus dados. Você pode até mesmo usar PARTITION BY, ORDER BY e WITH SINGLE PARTITION para particionar a tabela de entrada em subconjuntos de linhas a serem processados por chamadas de função independentes diretamente na sua função Python.
Execução de inicialização pesada apenas uma vez por partição
Com um UDTF, você pode fazer a execução de códigos de configuração caros, como carregar um modelo de ML grande ou um arquivo de referência grande, apenas uma vez para cada partição de dados, e não para cada linha.
Manter o contexto entre as linhas
As UDTFs podem manter estados de uma linha para a outra dentro de uma partição. Essa capacidade única permite análises avançadas, como detecção de padrões em séries temporais e cálculos contínuos complexos.
Melhor ainda, quando as UDTFs são definidas no Unity Catalog (UC), essas funções são acessíveis, detectáveis e executáveis por qualquer pessoa com o acesso apropriado. Em resumo, você escreve uma vez e execução em qualquer lugar.
Temos o prazer de anunciar que as UDTFs em Python do UC agora estão disponíveis em Public Preview com o Databricks Runtime 17.3 LTS, o Databricks SQL e os Notebooks e Jobs Serverless.
Neste blog, vamos discutir alguns casos de uso comuns de UDTFs Python do UC com exemplos e explicar como você pode usá-las em seu pipeline de dados.
Mas, primeiro, por que usar UDTFs com UC?
Implemente uma vez em Python puro e chame-a de qualquer lugar em sessões e Workspaces
Escreva sua lógica em uma classe Python padrão e chame as UDTFs em Python a partir de SQL warehouses (com Databricks SQL Pro e serverless), clusters UC Standard e Dedicados e Lakeflow Declarative pipelines.
Descubra usando tabelas do sistema ou o Catalog Explorer
Conceder e revogar permissões para UDTFs do Python
Vamos começar com um problema comum de engenharia de dados: corresponder endereços IP a uma lista de blocos CIDR de rede (por exemplo, para identificar tráfego de redes internas). Essa tarefa é complicada em SQL padrão, pois faltam funções integradas para lógica e pacotes CIDR.
Os UDTFs do UC Python eliminam esse atrito. Eles permitem que você traga as bibliotecas e os algoritmos avançados do Python diretamente para o seu SQL. Criaremos uma função que:
Vamos começar com alguns dados de amostra contendo endereços IPv4 e IPv6.
A seguir, definiremos e faremos o registro de nossa UDTF. Observe a estrutura da classe Python:
Agora que nosso ip_cidr_matcher está registrado no Unity Catalog, podemos chamá-lo diretamente do SQL usando a sintaxe TABLE(). É tão simples quanto consultar uma tabela comum.
A saída é:
| log_id | ip_address | Rede | ip_version |
|---|---|---|---|
| log1 | 192.168.1.100 | 192.168.0.0/16 | 4 |
| log2 | 10.0.0.5 | 10.0.0.0/8 | 4 |
| log3 | 172.16.0.10 | 172.16.0.0/12 | 4 |
| log4 | 8.8.8.8 | nulo | 4 |
| log5 | 2001:db8::1 | 2001:db8::/32 | 6 |
| log6 | 2001:db8:85a3::8a2e:370:7334 | 2001:db8::/32 | 6 |
| log7 | fe80::1 | fe80::/10 | 6 |
| log8 | ::1 | ::1/128 | 6 |
| log9 | 2001:db8:1234:5678::1 | 2001:db8::/32 | 6 |
Este exemplo demonstra a configuração e o uso de uma UDTF em Python do UC para legendagem de imagens em lotes usando Endpoints de servindo modelo de visão da Databricks. Primeiro, criamos uma tabela contendo URLs de imagens públicas do Wikimedia Commons:
Esta tabela contém 4 imagens de amostra: um calçadão na natureza, uma foto macro de uma formiga, um gato e uma galáxia.
E então criamos uma UDTF Python do UC para gerar legendas de imagem.
Lembre-se de substituir <workspace-url> pela URL real do seu workspace da Databricks (por exemplo, https://your-workspace.cloud.databricks.com).
Para usar a UDTF de legendagem de imagens em lotes, basta chamá-la com a tabela de imagens de amostra: lembre-se de substituir your_secret_scope e api_token pelo secret scope e pelo nome da key reais para o token da API da Databricks.
A saída é:
| legenda |
| Passarela de madeira atravessando gramíneas vibrantes de zona úmida sob o céu azul |
| Formiga preta em fotografia macro detalhada, em pé sobre uma superfície texturizada |
| Gato malhado descansando confortavelmente em uma borda branca contra uma parede branca |
| Galáxia espiral deslumbrante com núcleo central brilhante e braços azul-esbranquiçados contra o vazio negro do espaço. |
Você também pode gerar legendas de imagens categoria por categoria:
A saída é:
| legenda |
| Formiga preta em fotografia macro detalhada, em pé sobre uma superfície texturizada |
| Galáxia espiral deslumbrante com centro brilhante e braços extensos com tons azulados contra o negrume do espaço. |
| Gato tigrado descansando confortavelmente em uma borda branca contra uma parede branca. |
| Passarela de madeira atravessando gramíneas exuberantes de zona úmida sob o céu azul |
Estamos trabalhando ativamente para estender as UDTFs em Python com recursos ainda mais poderosos e de alto desempenho, incluindo:
(This blog post has been translated using AI-powered tools) Original Post
Data Engineering
March 18, 2025/7 min de leitura

