Skip to main content
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:
También requiere el analizador (enable_analyzer, activado de forma predeterminada).

Sintaxis

Argumentos

  • expression — Una expresión constante que devuelve una cadena de consulta. Se permiten parámetros de consulta y subconsultas escalares.
  • SELECT ... — Una consulta SELECT que devuelve una cadena de consulta. Esta forma es azúcar sintáctico de una subconsulta escalar: eval(SELECT ...) es equivalente a eval((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:
  • String
  • Nullable(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:
Resultado:
Usa un parámetro de consulta:
Resultado:
Evalúe una consulta SELECT de entrada que devuelva el texto de la consulta:
Resultado:
Usa el esquema generado en la consulta externa:
Resultado:

Restricciones

  • eval funciona solo con el analizador de consultas (enable_analyzer = 1).
  • La consulta generada debe ser una única consulta SELECT, sin opciones de salida como INTO OUTFILE o FORMAT. eval no ejecuta múltiples sentencias.
  • La consulta generada debe ser autocontenida: se resuelve en su propio ámbito y no puede hacer referencia a alias de WITH ni a columnas de la consulta externa.
  • La consulta generada no puede volver a usar la función de tabla eval.
  • eval no puede usarse como argumento de otra función de tabla, como remote('host', eval(...)). Para ejecutar la consulta generada en un servidor remoto, envuélvela en view: 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 consulta SELECT generada no se registra como una consulta de usuario independiente.
Última modificación el 23 de julio de 2026