Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

eval

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:

SET allow_experimental_eval_table_function = 1;

Também requer o analisador (enable_analyzer, ativado por padrão).

Sintaxe

eval(expression)
eval(SELECT ...)

Argumentos

  • 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.

Valor retornado

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.

Exemplos

Avalie uma expressão constante:

SELECT * FROM eval('SEL' || 'ECT 1 AS x');

Resultado:

┌─x─┐
│ 1 │
└───┘

Use um parâmetro de consulta:

SET param_q = 'SELECT 2 AS y';
SELECT * FROM eval({q:String});

Resultado:

┌─y─┐
│ 2 │
└───┘

Avalie uma consulta SELECT de entrada que retorna o texto da consulta:

SELECT * FROM eval(SELECT 'SELECT 3 AS z');

Resultado:

┌─z─┐
│ 3 │
└───┘

Use o esquema gerado na consulta externa:

SELECT x + 1 FROM eval('SELECT 4 AS x');

Resultado:

┌─plus(x, 1)─┐
│          5 │
└────────────┘

Restrições

  • 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.
Navigation