Skip to main content
Табличная функция eval вычисляет свой аргумент в строку запроса, а затем выполняет её как один запрос SELECT. Эта табличная функция является экспериментальной и по умолчанию отключена. Чтобы включить её, используйте настройку allow_experimental_eval_table_function:
Для этого также нужен анализатор (enable_analyzer, который по умолчанию включен).

Синтаксис

Аргументы

  • expression — Константное выражение, возвращающее строку запроса. Допускаются параметры запроса и скалярные подзапросы.
  • SELECT ... — Запрос SELECT, возвращающий строку запроса. Эта форма представляет собой синтаксический сахар для скалярного подзапроса: eval(SELECT ...) эквивалентно eval((SELECT ...)), поэтому запрос должен возвращать ровно одну строку и один столбец.
Значение выражения должно иметь один из следующих типов:
  • String
  • Nullable(String)
  • LowCardinality(String)
  • LowCardinality(Nullable(String))
Если значение равно NULL, eval генерирует исключение.

Возвращаемое значение

Возвращает результат сгенерированного запроса SELECT в виде таблицы. Схема выходных данных определяется при анализе табличной функции eval, поэтому внешние запросы могут ссылаться на реальные имена столбцов и типы сгенерированного запроса.

Примеры

Вычислите константное выражение:
Результат:
Используйте параметр запроса:
Результат:
Выполняет входной SELECT-запрос и возвращает текст запроса:
Результат:
Используйте созданную схему во внешнем запросе:
Результат:

Ограничения

  • eval работает только с анализатором запросов (enable_analyzer = 1).
  • Сгенерированный запрос должен представлять собой один запрос SELECT без предложений вывода, таких как INTO OUTFILE или FORMAT. eval не выполняет несколько операторов.
  • Сгенерированный запрос должен быть самодостаточным: он обрабатывается в собственной области видимости и не может ссылаться на псевдонимы WITH или столбцы внешнего запроса.
  • Сгенерированный запрос не может повторно использовать табличную функцию eval.
  • eval нельзя использовать в качестве аргумента другой табличной функции, например remote('host', eval(...)). Чтобы выполнить сгенерированный запрос на удалённом сервере, оберните его в view: remote('host', view(SELECT * FROM eval(...))).
  • Аргумент вычисляется один раз при анализе запроса, а не отдельно для каждой строки или блока.
  • Во внешнем журнале запросов записывается исходный запрос, содержащий eval; сгенерированный запрос SELECT не записывается как отдельный пользовательский запрос.
Последнее изменение 23 июля 2026 г.