A função de tabela eval avalia seu argumento como uma string de consulta e, em seguida, executa essa string como uma única consulta SELECT.
Esta função de tabela é experimental e fica desativada por padrão. Habilite-a com a configuração allow_experimental_eval_table_function:
Também requer o analisador (enable_analyzer, ativado por padrão).
expression — Uma expressão constante que retorna uma string de consulta. Parâmetros de consulta e subconsultas escalares são permitidos.
SELECT ... — Uma consulta SELECT que retorna uma string de consulta. Essa forma é um açúcar sintático para uma subconsulta escalar: eval(SELECT ...) é equivalente a eval((SELECT ...)), portanto a consulta deve retornar exatamente uma linha e uma coluna.
O valor da expressão deve ter um dos seguintes tipos:
String
Nullable(String)
LowCardinality(String)
LowCardinality(Nullable(String))
Se o valor for NULL, eval lança uma exceção.
Retorna o resultado da consulta SELECT gerada na forma de uma tabela.
O esquema de saída é determinado quando a função de tabela eval é analisada, portanto consultas externas podem se referir aos nomes e tipos reais das colunas da consulta gerada.
Avalie uma expressão constante:
Resultado:
Use um parâmetro de consulta:
Resultado:
Avalie uma consulta SELECT de entrada que retorna o texto da consulta:
Resultado:
Use o esquema gerado na consulta externa:
Resultado:
eval funciona apenas com o analisador de consultas (enable_analyzer = 1).
- A consulta gerada deve ser uma única consulta
SELECT, sem opções de saída como INTO OUTFILE ou FORMAT. eval não executa várias instruções.
- A consulta gerada deve ser autocontida: ela é resolvida em seu próprio escopo e não pode referenciar aliases de
WITH nem colunas da consulta externa.
- A consulta gerada não pode usar a função de tabela
eval novamente.
eval não pode ser usado como argumento de outra função de tabela, como remote('host', eval(...)). Para executar a consulta gerada em um servidor remoto, encapsule-a em view: remote('host', view(SELECT * FROM eval(...))).
- O argumento é avaliado uma vez durante a análise da consulta, não uma vez por linha ou bloco.
- O log da consulta externa registra a consulta original que contém
eval; a consulta SELECT gerada não é registrada como uma consulta de usuário separada.
Última modificação em 23 de julho de 2026