La función de tabla eval evalúa su argumento como una cadena de consulta y, a continuación, ejecuta esa cadena como una única consulta SELECT.
Esta función de tabla es Experimental y está deshabilitada de forma predeterminada. Habilítela con la configuración allow_experimental_eval_table_function:
SET allow_experimental_eval_table_function = 1;También requiere el analizador (enable_analyzer, activado de forma predeterminada).
Sintaxis
eval(expression)
eval(SELECT ...)Argumentos
expression— Una expresión constante que devuelve una cadena de consulta. Se permiten parámetros de consulta y subconsultas escalares.SELECT ...— Una consultaSELECTque devuelve una cadena de consulta. Esta forma es azúcar sintáctico de una subconsulta escalar:eval(SELECT ...)es equivalente aeval((SELECT ...)), por lo que la consulta debe devolver exactamente una fila y una columna.
El valor de la expresión debe tener uno de estos tipos:
StringNullable(String)LowCardinality(String)LowCardinality(Nullable(String))
Si el valor es NULL, eval lanza una excepción.
Valor devuelto
Devuelve el resultado de la consulta SELECT generada en forma de tabla.
El esquema de salida se determina cuando se analiza la función de tabla eval, por lo que las consultas externas pueden hacer referencia a los nombres y tipos reales de las columnas de la consulta generada.
Ejemplos
Evalúe una expresión constante:
SELECT * FROM eval('SEL' || 'ECT 1 AS x');Resultado:
┌─x─┐
│ 1 │
└───┘Usa un parámetro de consulta:
SET param_q = 'SELECT 2 AS y';
SELECT * FROM eval({q:String});Resultado:
┌─y─┐
│ 2 │
└───┘Evalúe una consulta SELECT de entrada que devuelva el texto de la consulta:
SELECT * FROM eval(SELECT 'SELECT 3 AS z');Resultado:
┌─z─┐
│ 3 │
└───┘Usa el esquema generado en la consulta externa:
SELECT x + 1 FROM eval('SELECT 4 AS x');Resultado:
┌─plus(x, 1)─┐
│ 5 │
└────────────┘Restricciones
evalfunciona solo con el analizador de consultas (enable_analyzer = 1).- La consulta generada debe ser una única consulta
SELECT, sin opciones de salida comoINTO OUTFILEoFORMAT.evalno ejecuta múltiples sentencias. - La consulta generada debe ser autocontenida: se resuelve en su propio ámbito y no puede hacer referencia a alias de
WITHni a columnas de la consulta externa. - La consulta generada no puede volver a usar la función de tabla
eval. evalno puede usarse como argumento de otra función de tabla, comoremote('host', eval(...)). Para ejecutar la consulta generada en un servidor remoto, envuélvela enview:remote('host', view(SELECT * FROM eval(...))).- El argumento se evalúa una vez durante el análisis de la consulta, no una vez por fila o bloque.
- El registro de consultas de la consulta externa registra la consulta original que contiene
eval; la consultaSELECTgenerada no se registra como una consulta de usuario independiente.
- función de tabla
view - configuración
allow_experimental_eval_table_function