Skip to main content
chDB では、Python 関数を SQL から呼び出せる UDF として登録できます。これらはネイティブにインプロセスで実行されるため、サブプロセスの起動やシリアライゼーションのオーバーヘッドは発生しません。関数は型安全で、Python アノテーションに基づく自動型推論をサポートし、NULL と例外の処理を設定できます。

クイックスタート

このガイドの例では、デフォルトのCSV出力フォーマットで query() を実行します。インラインコメントには論理的な結果の値を示します。生データ出力では NULL\N として出力され、文字列および日付の値にはCSVの引用符付けが適用されます (例: "Hello, world!") 。

登録方法

@func デコレータ

UDF を登録する最も簡単な方法です。関数の __name__ が SQL 関数名として使用されます。
デコレートされた関数は、通常の Python 関数と同様に引き続き呼び出せます。

create_function

任意の呼び出し可能なオブジェクト (lambda、関数、method) を明示的な名前で登録します。

drop_function

登録済みの UDF を削除します。登録されていない名前を削除しようとしても何も起こらないため、無条件で安全に呼び出せます。
すでに登録されている名前を登録しようとするとエラーになります。UDFは自動的に置き換えられません。たとえばノートブックのセルを再実行する場合など、関数を再登録するには、まずdrop_function(name)を呼び出してください。

型システム

利用可能な型

すべての型は chdb.sqltypes からインポートできます。

型の指定

型は次の 4 つの方法で指定できます。

自動型推論

arg_types または return_type を省略すると、chDB は Python の型アノテーションから型を推論します。
arg_types を明示的に指定する場合は、すべてのパラメータを指定する必要があります。一部を明示的に指定し、残りを推論させることはサポートされていません。これは create_function@func デコレータの両方に適用されます。すべてのパラメータに型を指定するか、型指定をすべて省略して chDB にアノテーションから推論させてください。
戻り値の型は常に必要です。return_type を省略し、関数に戻り値のアノテーションもない場合、登録に失敗します。一方、引数の型は任意です。明示的な型指定もアノテーションもないパラメータは、サポートされている任意の入力型を動的に受け入れます。

NULL の処理

on_null パラメータは、入力引数のいずれかが NULL の場合の動作を制御します。 enum も使用できます: chdb.NullHandling.SKIP / chdb.NullHandling.PASS

例: default (スキップ)

例: NULL を None として渡す

例: 複数の引数

例外処理

on_error パラメータは、Python 関数で例外が発生した場合の動作を制御します。 enum も使用できます: chdb.ExceptionHandling.PROPAGATE / chdb.ExceptionHandling.IGNORE

例: default (伝播)

例: エラーを無視する

NULL と例外処理の組み合わせ

on_null オプションと on_error オプションは組み合わせて使用できます。

DateTime と タイムゾーン のサポート

UDF は、タイムゾーン を認識する日付と時刻の型を完全にサポートしています。

Date 型

タイムゾーン付きDateTime

DateTime64 (高精度)

DATETIME64 のデフォルトのスケールは6 (マイクロ秒) です。
  • 入力の DateTime/DateTime64 値には ClickHouse のタイムゾーン情報が含まれます
  • 出力される datetime オブジェクトにはタイムゾーン情報が保持されます
  • タイムゾーン変換は自動的に行われます

sessions で UDF を使用する

UDF はグローバルに登録され、同じプロセス内のすべての sessions で利用できます。
最終更新日 2026年8月14日