Executable pool позволяет загружать данные из пула процессов. Этот источник не работает со структурами словарей, для которых требуется загружать все данные из источника.
Executable pool работает, если словарь хранится с использованием одной из следующих структур:
cachecomplex_key_cachessd_cachecomplex_key_ssd_cachedirectcomplex_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
))<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 |
Исполняемый скрипт должен содержать основной цикл с возможностью чтения и записи. После уничтожения словаря канал закрывается, и у исполняемого файла будет 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, указанной параметром user_scripts_path. Дополнительные аргументы скрипта можно указать через пробел. Пример: script_name arg1 arg2. Если execute_direct = 0, command передается как аргумент для bin/sh -c. Значение по умолчанию — 1. Необязательно. |
send_chunk_header |
Управляет тем, нужно ли отправлять количество строк перед отправкой фрагмента данных процессу. Значение по умолчанию — false. Необязательно. |
Этот источник словаря можно настроить только через XML-конфигурацию. Создание словарей с executable source через DDL отключено, иначе пользователь БД смог бы выполнять произвольный бинарный файл на узле ClickHouse.