メインコンテンツまでスキップ
メインコンテンツまでスキップ

UDFのためのexecutableテーブル関数

executableテーブル関数は、ユーザー定義関数 (UDF) の出力に基づいてテーブルを作成します。このUDFは、stdoutに行を出力するスクリプトで定義されます。実行可能なスクリプトはusers_scriptsディレクトリに保存され、任意のソースからデータを読み取ることができます。ClickHouseサーバーに実行可能なスクリプトを実行するために必要なすべてのパッケージがインストールされていることを確認してください。例えば、Pythonスクリプトの場合、サーバーに必要なPythonパッケージがインストールされていることを確認してください。

オプションとして、スクリプトが読み取るために、その結果をstdinにストリーミングする1つ以上の入力クエリを含めることができます。

注記

一般的なUDF関数とexecutableテーブル関数およびExecutableテーブルエンジンの大きな利点は、一般的なUDF関数は行数を変更できないことです。例えば、入力が100行の場合、結果も100行を返す必要があります。executableテーブル関数またはExecutableテーブルエンジンを使用する場合、スクリプトは複雑な集計を含む任意のデータ変換を行うことができます。

構文

executableテーブル関数は、3つのパラメータを必要とし、オプションとして入力クエリのリストを受け取ります:

  • script_name: スクリプトのファイル名。user_scriptsフォルダーに保存されます(デフォルトではuser_scripts_path設定のフォルダーです)
  • format: 生成されるテーブルのフォーマット
  • structure: 生成されるテーブルのスキーマ
  • input_query: スクリプトにstdinを介して渡される結果を持つオプションのクエリ(またはクエリのコレクション)
注記

同じ入力クエリで同じスクリプトを繰り返し呼び出す場合は、Executableテーブルエンジンの使用を検討してください。

以下のPythonスクリプトはgenerate_random.pyという名前で、user_scriptsフォルダーに保存されています。このスクリプトは、数値iを読み取り、i個のランダムな文字列を生成し、各文字列の前にタブで区切られた番号を出力します:

スクリプトを呼び出し、10個のランダムな文字列を生成させてみましょう:

応答は次のようになります:

設定

  • send_chunk_header - データのチャンクを処理する前に行数を送信するかどうかを制御します。デフォルト値はfalseです。
  • pool_size — プールのサイズ。pool_sizeに0を指定すると、プールサイズの制限はありません。デフォルト値は16です。
  • max_command_execution_time — データブロックを処理するための実行可能スクリプトコマンドの最大実行時間。秒単位で指定します。デフォルト値は10です。
  • command_termination_timeout — 実行可能スクリプトはメインの読み書きループを含むべきです。テーブル関数が破棄されると、パイプが閉じられ、実行ファイルはcommand_termination_timeout秒以内にシャットダウンする必要があります。さもなければ、ClickHouseは子プロセスにSIGTERMシグナルを送信します。秒単位で指定します。デフォルト値は10です。
  • command_read_timeout - コマンドのstdoutからデータを読み取るためのタイムアウト(ミリ秒単位)。デフォルト値は10000です。
  • command_write_timeout - コマンドのstdinにデータを書き込むためのタイムアウト(ミリ秒単位)。デフォルト値は10000です。

スクリプトへのクエリ結果の渡し方

Executableテーブルエンジンのスクリプトへのクエリ結果の渡し方の例も必ずチェックしてください。ここで、同じスクリプトを使ってexecutableテーブル関数で実行する方法を示します: