Исполняемая Табличная Функция для 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
: