跳转到主要内容
Executable pool 允许从进程池中加载数据。 该字典源不适用于那些需要从源一次性加载全部数据的字典布局。 如果字典使用以下任一布局存储,则可以使用 Executable pool:
  • cache
  • complex_key_cache
  • ssd_cache
  • complex_key_ssd_cache
  • direct
  • complex_key_direct
Executable pool 会按指定命令启动一个进程池,并在这些进程退出前持续保持其运行。程序应在 STDIN 中有可用数据时从中读取,并将结果输出到 STDOUT。它可以等待 STDIN 中的下一块数据。ClickHouse 在处理完一块数据后不会关闭 STDIN,而是在需要时通过管道传输另一块数据。可执行脚本应为这种数据处理方式做好准备——它应轮询 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文件格式。支持 Formats 中描述的所有格式。
pool_size进程池大小。如果将 0 指定为 pool_size,则表示进程池大小不受限制。默认值为 16
command_termination_timeout可执行脚本应包含主读写循环。字典销毁后,管道会关闭;可执行文件会有 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,则会在 user_scripts_path 指定的 user_scripts 文件夹中查找 command。可使用空白分隔符指定额外的脚本参数。示例:script_name arg1 arg2。如果 execute_direct = 0,则会将 command 作为参数传递给 bin/sh -c。默认值为 1。可选。
send_chunk_header控制在向进程发送一块数据之前,是否先发送行数。默认值为 false。可选。
该字典源只能通过 XML 配置进行配置。通过 DDL 使用 executable source 创建字典的功能已被禁用,否则数据库用户将能够在 ClickHouse 节点上执行任意可执行文件。
最后修改于 2026年6月10日