Перейти к основному содержимому
Перейти к основному содержимому

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