Функция таблицы 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
: