Skip to main content
chDB vous permet d’enregistrer des fonctions Python en tant qu’UDF appelables depuis SQL. Elles s’exécutent nativement dans le processus, sans lancer de sous-processus ni générer de surcharge de sérialisation. Ces fonctions sont sûres du point de vue des types, prennent en charge l’inférence automatique des types à partir des annotations Python et permettent de configurer la gestion de NULL et des exceptions.

Quick start

Les exemples de ce guide exécutent query() avec le format de sortie CSV par défaut. Les commentaires intégrés indiquent les valeurs de résultat logiques ; la sortie brute affiche NULL sous la forme \N et applique les règles d’échappement CSV aux valeurs de type chaîne et date (par exemple "Hello, world!").

Méthodes d’inscription

Décorateur @func

La façon la plus simple d’enregistrer une UDF. L’attribut __name__ de la fonction devient le nom de la fonction SQL.
La fonction décorée reste appelable comme une fonction Python normale :

create_function

Enregistrez tout objet appelable (lambda, fonction, méthode) sous un nom explicite :

drop_function

Supprime une UDF enregistrée. La suppression d’un nom non enregistré n’a aucun effet ; cette fonction peut donc être appelée sans condition :
L’enregistrement d’un nom déjà utilisé génère une erreur : les UDFs ne sont pas remplacées silencieusement. Appelez d’abord drop_function(name) pour réenregistrer une fonction, par exemple lors de la réexécution d’une cellule de notebook.

Système de types

Types disponibles

Tous les types peuvent être importés depuis chdb.sqltypes :

Spécifier les types

Les types peuvent être fournis de quatre manières :

Inférence automatique des types

Lorsque arg_types ou return_type est omis, chDB infère les types à partir des annotations de type Python :
Si arg_types est fourni explicitement, il doit couvrir tous les paramètres — il n’est pas possible de combiner des types explicitement fournis et des types inférés. Cela s’applique à create_function comme au décorateur @func : spécifiez les types de tous les paramètres ou omettez-les entièrement et laissez chDB les déduire des annotations.
Un type de retour est toujours requis : si return_type est omis et que la fonction ne possède aucune annotation de retour, l’enregistrement échoue. En revanche, les types d’arguments sont facultatifs : un paramètre sans type explicite ni annotation accepte dynamiquement tout type d’entrée pris en charge.

Gestion des NULL

Le paramètre on_null contrôle le comportement lorsqu’un argument d’entrée est NULL. Vous pouvez également utiliser l’enum : chdb.NullHandling.SKIP / chdb.NullHandling.PASS.

Exemple : default (ignorer)

Exemple : transmettre NULL avec None

Exemple : plusieurs arguments

Gestion des exceptions

Le paramètre on_error définit le comportement à adopter lorsqu’une fonction Python lève une exception. Vous pouvez également utiliser l’enum : chdb.ExceptionHandling.PROPAGATE / chdb.ExceptionHandling.IGNORE.

Exemple : default (propager)

Exemple : ignorer les erreurs

Combinaison de la gestion de NULL et des exceptions

Les options on_null et on_error peuvent être combinées :

Prise en charge de DateTime et des fuseaux horaires

Les UDFs prennent pleinement en charge les types de date et d’heure tenant compte des fuseaux horaires.

Types Date

DateTime avec fuseaux horaires

DateTime64 (haute précision)

DATETIME64 utilise par défaut une précision de 6 (microsecondes) :
  • Les valeurs DateTime/DateTime64 d’entrée incluent les informations de fuseau horaire provenant de ClickHouse
  • Les objets datetime de sortie conservent les informations de fuseau horaire
  • La conversion de fuseau horaire est gérée automatiquement

Utilisation des UDF avec les sessions

Les UDF sont enregistrées de manière globale et disponibles dans toutes les sessions d’un même processus :
Dernière modification le 14 août 2026