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

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