Функция таблицы executable для UDF
Функция таблицы executable
создает таблицу на основе вывода пользовательской функции (UDF), которую вы определяете в скрипте, который выводит строки в stdout. Исполняемый скрипт хранится в директории users_scripts
и может считывать данные из любого источника. Убедитесь, что ваш сервер ClickHouse имеет все необходимые пакеты для выполнения исполняемого скрипта. Например, если это скрипт на Python, убедитесь, что на сервере установлены необходимые пакеты Python.
Вы можете по желанию включить один или несколько входных запросов, которые передают свои результаты в stdin для чтения скриптом.
Ключевое преимущество между обычными функциями UDF и функцией таблицы executable
и движком таблицы Executable
заключается в том, что обычные функции UDF не могут изменять количество строк. Например, если входных данных 100 строк, то результирующий набор данных также должен содержать 100 строк. При использовании функции таблицы executable
или движка таблицы Executable
ваш скрипт может выполнять любые трансформации данных, включая сложные агрегации.
Синтаксис
Функция таблицы executable
требует три параметра и принимает необязательный список входных запросов:
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
— размер пула. Если указано значение 0 дляpool_size
, то ограничения на размер пула отсутствуют. Значение по умолчанию: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
: