Skip to main content
O chDB permite registrar funções Python como UDFs que podem ser chamadas em SQL. Elas são executadas nativamente no processo — sem criar subprocessos nem incorrer em sobrecarga de serialização. As funções têm segurança de tipos, oferecem inferência automática de tipos com base em anotações Python e permitem configurar o tratamento de NULL e exceções.

Início rápido

Os exemplos deste guia executam query() com o formato de saída CSV padrão. Os comentários inline mostram os valores lógicos do resultado; a saída bruta exibe NULL como \N e aplica delimitação CSV a valores de string e data (por exemplo, "Hello, world!").

Métodos de registro

Decorador @func

A maneira mais simples de registrar uma UDF. O __name__ da função se torna o nome da função SQL.
A função decorada continua podendo ser chamada normalmente em Python:

create_function

Registre qualquer função chamável (lambda, função, método) com um nome explícito:

drop_function

Remove uma UDF registrada. Remover um nome que não está registrado não tem efeito; portanto, é seguro chamar a função incondicionalmente:
Registrar um nome já registrado gera um erro — as UDFs não são substituídas silenciosamente. Primeiro, chame drop_function(name) para registrar a função novamente, por exemplo, ao reexecutar uma célula de notebook.

Sistema de tipos

Tipos disponíveis

Todos os tipos podem ser importados de chdb.sqltypes:

Especificando tipos

Os tipos podem ser especificados de quatro maneiras:

Inferência automática de tipos

Quando arg_types ou return_type é omitido, o chDB infere os tipos com base nas anotações de tipo do Python:
Se arg_types for fornecido explicitamente, ele deverá abranger todos os parâmetros — não há suporte para combinar parcialmente tipos explícitos e inferidos. Isso se aplica tanto a create_function quanto ao decorador @func: especifique os tipos de todos os parâmetros ou omita-os completamente e deixe o chDB inferi-los a partir das anotações.
Um tipo de retorno é sempre obrigatório: se return_type for omitido e a função não tiver uma anotação de retorno, o registro falhará. Em contrapartida, os tipos dos argumentos são opcionais — um parâmetro sem tipo explícito nem anotação aceita dinamicamente qualquer tipo de entrada compatível.

Tratamento de NULL

O parâmetro on_null controla o comportamento quando qualquer argumento de entrada é NULL. Você também pode usar o enum: chdb.NullHandling.SKIP / chdb.NullHandling.PASS.

Exemplo: default (pular)

Exemplo: passar NULL como None

Exemplo: vários argumentos

Tratamento de exceções

O parâmetro on_error controla o comportamento quando a função Python lança uma exceção. Você também pode usar o enum: chdb.ExceptionHandling.PROPAGATE / chdb.ExceptionHandling.IGNORE.

Exemplo: default (propagar)

Exemplo: ignorar erros

Combinando o tratamento de NULL e exceções

As opções on_null e on_error podem ser combinadas:

Suporte a DateTime e fuso horário

As UDFs oferecem suporte completo a tipos de data e hora com suporte a fuso horário.

Tipo Date

DateTime com fusos horários

DateTime64 (alta precisão)

DATETIME64 tem escala 6 (microssegundos) por padrão:
  • Os valores de entrada DateTime/DateTime64 incluem informações de fuso horário do ClickHouse
  • Os objetos datetime de saída preservam as informações de fuso horário
  • A conversão de fuso horário é realizada automaticamente

Usando UDFs com sessões

As UDFs são registradas globalmente e ficam disponíveis em todas as sessões do mesmo processo:
Última modificação em 14 de agosto de 2026