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 consultaSELECTque retorna uma string de consulta. Essa forma é um açúcar sintático para uma subconsulta escalar:eval(SELECT ...)é equivalente aeval((SELECT ...)), portanto a consulta deve retornar exatamente uma linha e uma coluna.
O valor da expressão deve ter um dos seguintes tipos:
StringNullable(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
evalfunciona apenas com o analisador de consultas (enable_analyzer = 1).- A consulta gerada deve ser uma única consulta
SELECT, sem opções de saída comoINTO OUTFILEouFORMAT.evalnã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
WITHnem colunas da consulta externa. - A consulta gerada não pode usar a função de tabela
evalnovamente. evalnão pode ser usado como argumento de outra função de tabela, comoremote('host', eval(...)). Para executar a consulta gerada em um servidor remoto, encapsule-a emview: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 consultaSELECTgerada não é registrada como uma consulta de usuário separada.
- função de tabela
view - configuração
allow_experimental_eval_table_function