eval 表函数会先将其参数求值为查询字符串,然后将该字符串作为单条 SELECT 查询执行。
此表函数处于 Experimental 阶段,默认已禁用。使用 allow_experimental_eval_table_function 设置启用它:
enable_analyzer,默认启用) 。
语法
参数
expression— 返回查询字符串的常量表达式。允许使用查询参数和标量子查询。SELECT ...— 返回查询字符串的SELECT查询。这种形式是标量子查询的语法糖:eval(SELECT ...)等同于eval((SELECT ...)),因此该查询必须恰好返回一行一列。
StringNullable(String)LowCardinality(String)LowCardinality(Nullable(String))
NULL,eval 会抛出异常。
返回值
SELECT 查询结果以表的形式返回。
输出 schema 会在分析 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查询不会作为单独的用户查询被记录。
view表函数allow_experimental_eval_table_function设置