eval 테이블 함수는 인수를 쿼리 문자열로 평가한 후, 해당 문자열을 단일 SELECT 쿼리로 실행합니다.
이 테이블 함수는 실험적 기능이며 기본적으로 비활성화되어 있습니다. 사용하려면 allow_experimental_eval_table_function 설정을 활성화하십시오:
enable_analyzer)가 필요합니다.
구문
인수
expression— 쿼리 문자열을 반환하는 상수 표현식입니다. 쿼리 매개변수와 스칼라 서브쿼리를 사용할 수 있습니다.SELECT ...— 쿼리 문자열을 반환하는SELECT쿼리입니다. 이 형식은 스칼라 서브쿼리의 문법적 설탕으로,eval(SELECT ...)는eval((SELECT ...))와 동일합니다. 따라서 이 쿼리는 정확히 1개의 행과 1개의 컬럼을 반환해야 합니다.
StringNullable(String)LowCardinality(String)LowCardinality(Nullable(String))
NULL이면 eval은 예외를 발생시킵니다.
반환 값
SELECT 쿼리의 결과를 테이블로 반환합니다.
출력 스키마는 eval 테이블 함수가 분석되는 시점에 결정되므로, 외부 쿼리에서 생성된 쿼리의 실제 컬럼명과 타입을 참조할 수 있습니다.
예시
SELECT 쿼리를 실행합니다:
제한 사항
eval은 쿼리 분석기(enable_analyzer = 1)에서만 작동합니다.- 생성된 쿼리는
INTO OUTFILE또는FORMAT과 같은 출력 옵션이 없는 단일SELECT쿼리여야 합니다.eval은 여러 SQL 문을 실행하지 않습니다. - 생성된 쿼리는 독립적이어야 합니다. 즉, 자체 범위에서 해석되며 외부 쿼리의
WITH별칭이나 컬럼을 참조할 수 없습니다. - 생성된 쿼리에서는
eval테이블 함수를 다시 사용할 수 없습니다. eval은remote('host', eval(...))와 같이 다른 테이블 함수의 인수로 사용할 수 없습니다. 생성된 쿼리를 원격 서버에서 실행하려면view로 감싸십시오:remote('host', view(SELECT * FROM eval(...))).- 인수는 각 행이나 블록마다 한 번씩이 아니라, 쿼리를 분석하는 동안 한 번만 평가됩니다.
- 외부 쿼리의 쿼리 로그에는
eval이 포함된 원래 쿼리만 기록되며, 생성된SELECT쿼리는 별도의 사용자 쿼리로 기록되지 않습니다.
view테이블 함수allow_experimental_eval_table_function설정