UDFのためのExecutable Table Function
executable
テーブル関数は、スクリプト内で定義されたユーザー定義関数(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
テーブル関数を使用してその例の同じスクリプトを実行する方法です: