実行可能プールでは、プロセスプールからデータを読み込めます。 このソースは、ソースからすべてのデータを読み込む必要がある Dictionary レイアウトでは使用できません。
実行可能プールは、Dictionary が次のいずれかのレイアウトで保存される場合に使用できます。
cachecomplex_key_cachessd_cachecomplex_key_ssd_cachedirectcomplex_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
))<source>
<executable_pool>
<command><command>while read key; do printf "$key\tData for key $key\n"; done</command</command>
<format>TabSeparated</format>
<pool_size>10</pool_size>
<max_command_execution_time>10<max_command_execution_time>
<implicit_key>false</implicit_key>
</executable_pool>
</source>設定フィールド:
| 設定 | 説明 |
|---|---|
command |
実行可能ファイルの絶対パス、またはファイル名 (プログラムのディレクトリが PATH に含まれている場合) 。 |
format |
ファイルのフォーマットです。フォーマット に記載されているすべてのフォーマットがサポートされます。 |
pool_size |
プールサイズです。pool_size に 0 を指定すると、プールサイズの制限はありません。デフォルト値は 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_direct |
execute_direct = 1 の場合、command は user_scripts_path で指定された user_scripts フォルダ内から検索されます。追加のスクリプト引数は空白区切りで指定できます。例: script_name arg1 arg2。execute_direct = 0 の場合、command は bin/sh -c の引数として渡されます。デフォルト値は 1 です。省略可能です。 |
send_chunk_header |
プロセスに chunk のデータを送信する前に、行数を送るかどうかを制御します。デフォルト値は false です。省略可能です。 |
この Dictionary ソースは、XML 設定でのみ構成できます。DDL による executable ソースを使った Dictionary の作成は無効化されています。そうしないと、DB ユーザーが ClickHouse ノード上で任意のバイナリを実行できてしまうためです。