メインコンテンツへスキップ
実行可能プールでは、プロセスプールからデータを読み込めます。 このソースは、ソースからすべてのデータを読み込む必要がある Dictionary レイアウトでは使用できません。 実行可能プールは、Dictionary が次のいずれかのレイアウトで保存される場合に使用できます。
  • cache
  • complex_key_cache
  • ssd_cache
  • complex_key_ssd_cache
  • direct
  • complex_key_direct
実行可能プールは、指定したコマンドでプロセスプールを起動し、各プロセスが終了するまで実行し続けます。プログラムは、利用可能な間は STDIN からデータを読み取り、結果を STDOUT に出力する必要があります。また、STDIN 上の次のデータブロックを待機することもできます。ClickHouse は、1 つのデータブロックを処理したあとも STDIN を閉じず、必要に応じて別の chunk のデータをパイプで渡します。実行可能スクリプトは、このデータ処理方式に対応している必要があります。つまり、STDIN をポーリングし、STDOUT にデータを早めにフラッシュできるようにしておく必要があります。 設定例:
SOURCE(EXECUTABLE_POOL(
    command 'while read key; do printf "$key\tData for key $key\n"; done'
    format 'TabSeparated'
    pool_size 10
    max_command_execution_time 10
    implicit_key false
))
設定フィールド:
設定説明
command実行可能ファイルの絶対パス、またはファイル名 (プログラムのディレクトリが PATH に含まれている場合) 。
formatファイルのフォーマットです。フォーマット に記載されているすべてのフォーマットがサポートされます。
pool_sizeプールサイズです。pool_size0 を指定すると、プールサイズの制限はありません。デフォルト値は 16 です。
command_termination_timeout実行可能スクリプトには、メインの read-write ループが含まれている必要があります。Dictionary が破棄されるとパイプが閉じられ、実行可能ファイルは command_termination_timeout 秒以内に終了する必要があります。終了しない場合、ClickHouse は子プロセスに SIGTERM シグナルを送信します。秒単位で指定します。デフォルト値は 10 です。省略可能です。
max_command_execution_timeデータブロックを処理する際の、実行可能スクリプトコマンドの最大実行時間です。秒単位で指定します。デフォルト値は 10 です。省略可能です。
command_read_timeoutコマンドの stdout からデータを読み取る際のタイムアウト (ミリ秒) です。デフォルト値は 10000 です。省略可能です。
command_write_timeoutコマンドの stdin にデータを書き込む際のタイムアウト (ミリ秒) です。デフォルト値は 10000 です。省略可能です。
implicit_key実行可能ソースファイルは値のみを返すことができ、要求されたキーとの対応は、結果内の行の順序によって暗黙的に決まります。デフォルト値は false です。省略可能です。
execute_directexecute_direct = 1 の場合、commanduser_scripts_path で指定された user_scripts フォルダ内から検索されます。追加のスクリプト引数は空白区切りで指定できます。例: script_name arg1 arg2execute_direct = 0 の場合、commandbin/sh -c の引数として渡されます。デフォルト値は 1 です。省略可能です。
send_chunk_headerプロセスに chunk のデータを送信する前に、行数を送るかどうかを制御します。デフォルト値は false です。省略可能です。
この Dictionary ソースは、XML 設定でのみ構成できます。DDL による executable ソースを使った Dictionary の作成は無効化されています。そうしないと、DB ユーザーが ClickHouse ノード上で任意のバイナリを実行できてしまうためです。
最終更新日 2026年6月10日