Функция таблицы 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
- тайм-аут для чтения данных из стандартного вывода команды в миллисекундах. Значение по умолчанию 10000.command_write_timeout
- тайм-аут для записи данных в стандартный ввод команды в миллисекундах. Значение по умолчанию 10000.
Передача результатов запроса в скрипт
Не забудьте ознакомиться с примером в таблице Executable
о том, как передать результаты запроса в скрипт. Вот как вы вызываете тот же скрипт в этом примере, используя функцию таблицы executable
: