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
テーブル関数で実行する方法を示します: