Skip to main content
chDB permite registrar funciones de Python como UDF invocables desde SQL. Se ejecutan de forma nativa en el mismo proceso, sin iniciar subprocesos ni añadir sobrecarga de serialización. Las funciones tienen tipado seguro, admiten la inferencia automática de tipos a partir de anotaciones de Python y permiten configurar el manejo de NULL y de excepciones.

Inicio rápido

Los ejemplos de esta guía ejecutan query() con el formato de salida CSV predeterminado. Los comentarios en línea muestran los valores lógicos del resultado; la salida sin procesar representa NULL como \N y aplica comillas de CSV a los valores de cadena y fecha (por ejemplo, "Hello, world!").

Métodos de registro

Decorador @func

La forma más sencilla de registrar una UDF. El atributo __name__ de la función se convierte en el nombre de la función SQL.
La función decorada sigue pudiendo invocarse como una función normal de Python:

create_function

Registre cualquier objeto invocable (lambda, función, método) con un nombre explícito:

drop_function

Elimina una UDF registrada. Eliminar un nombre que no está registrado no tiene ningún efecto, por lo que se puede llamar incondicionalmente de forma segura:
Registrar un nombre que ya está registrado genera un error; las UDF no se reemplazan de forma silenciosa. Primero, llame a drop_function(name) para volver a registrar una función, por ejemplo, al volver a ejecutar una celda de un notebook.

Sistema de tipos

Tipos disponibles

Todos los tipos se pueden importar desde chdb.sqltypes:

Especificar tipos

Los tipos se pueden proporcionar de cuatro formas:

Inferencia automática de tipos

Cuando se omiten arg_types o return_type, chDB infiere los tipos a partir de las anotaciones de tipo de Python:
Si se proporciona arg_types explícitamente, debe incluir todos los parámetros; no se admite combinar parcialmente tipos explícitos e inferidos. Esto se aplica tanto a create_function como al decorador @func: especifique los tipos de todos los parámetros u omítalos por completo y deje que chDB los infiera a partir de las anotaciones.
Siempre se requiere un tipo de retorno: si se omite return_type y la función no tiene una anotación de retorno, se produce un error al registrarla. En cambio, los tipos de los argumentos son opcionales: un parámetro sin tipo explícito ni anotación acepta dinámicamente cualquier tipo de entrada compatible.

Manejo de NULL

El parámetro on_null controla el comportamiento cuando alguno de los argumentos de entrada es NULL. También puedes usar el enum: chdb.NullHandling.SKIP / chdb.NullHandling.PASS.

Ejemplo: predeterminado (omitir)

Ejemplo: pasar NULL como None

Ejemplo: varios argumentos

Manejo de excepciones

El parámetro on_error controla el comportamiento cuando la función de Python genera una excepción. También puede usar el enum: chdb.ExceptionHandling.PROPAGATE / chdb.ExceptionHandling.IGNORE.

Ejemplo: predeterminado (propagar)

Ejemplo: ignorar errores

Combinación de NULL y manejo de excepciones

Las opciones on_null y on_error se pueden combinar:

Compatibilidad con DateTime y zonas horarias

Las UDF admiten plenamente tipos de fecha y hora compatibles con zonas horarias.

Tipos de Date

DateTime con zonas horarias

DateTime64 (alta precisión)

DATETIME64 tiene una escala predeterminada de 6 (microsegundos):
  • Los valores de entrada DateTime/DateTime64 incluyen información sobre la zona horaria de ClickHouse
  • Los objetos datetime de salida conservan la información sobre la zona horaria
  • La conversión de zona horaria se gestiona automáticamente

Uso de UDFs con sesiones

Las UDFs se registran de forma global y están disponibles en todas las sesiones del mismo proceso:
Última modificación el 14 de agosto de 2026