eval 테이블 함수
eval 테이블 함수 (eval)
인자를 쿼리 문자열로 평가한 다음, 그 문자열을 단일 SELECT 쿼리로 실행하는 테이블 함수예요.
이 테이블 함수는 실험적이며 기본적으로 비활성화되어 있어요. allow_experimental_eval_table_function 설정으로 활성화합니다:
SET allow_experimental_eval_table_function = 1;
출처: 문서
본문
eval 테이블 함수는 인자를 쿼리 문자열로 평가한 다음, 그 문자열을 단일 SELECT 쿼리로 실행합니다.
이 테이블 함수는 실험적이며 기본적으로 비활성화되어 있습니다. allow_experimental_eval_table_function 설정으로 활성화하세요:
SET allow_experimental_eval_table_function = 1;
구문
eval(expression)
eval(SELECT ...)
인자
expression— 쿼리 문자열을 반환하는 상수 표현식. 쿼리 파라미터와 스칼라 서브쿼리가 허용됩니다.SELECT ...— 쿼리 문자열을 반환하는SELECT쿼리. 이 형태는 스칼라 서브쿼리의 문법적 설탕입니다:eval(SELECT ...)는eval((SELECT ...))와 동일하므로, 쿼리는 정확히 한 행과 한 컬럼을 반환해야 합니다.
표현식의 값은 다음 타입 중 하나여야 합니다:
StringNullable(String)LowCardinality(String)LowCardinality(Nullable(String))
값이 NULL이면 eval은 예외를 발생시킵니다.
반환 값
생성된 SELECT 쿼리의 결과를 테이블로 반환합니다.
출력 스키마는 eval 테이블 함수가 분석될 때 결정되므로, 외부 쿼리에서 생성된 쿼리의 실제 컬럼 이름과 타입을 참조할 수 있습니다.
예제
상수 표현식 평가하기:
SELECT * FROM eval('SEL' || 'ECT 1 AS x');
결과:
┌─x─┐
│ 1 │
└───┘
쿼리 파라미터 사용하기:
SET param_q = 'SELECT 2 AS y';
SELECT * FROM eval({q:String});
결과:
┌─y─┐
│ 2 │
└───┘
쿼리 텍스트를 반환하는 입력 SELECT 쿼리 평가하기:
SELECT * FROM eval(SELECT 'SELECT 3 AS z');
결과:
┌─z─┐
│ 3 │
└───┘
외부 쿼리에서 생성된 스키마 사용하기:
SELECT x + 1 FROM eval('SELECT 4 AS x');
결과:
┌─plus(x, 1)─┐
│ 5 │
└────────────┘
제약 사항
- 생성된 쿼리는
INTO OUTFILE이나FORMAT같은 출력 옵션이 없는 단일SELECT쿼리여야 합니다.eval은 여러 문장을 실행하지 않습니다. - 생성된 쿼리는 자체적으로 완결되어야 합니다. 자신의 스코프에서 해석되며, 외부 쿼리의
WITH별칭이나 컬럼을 참조할 수 없습니다. - 생성된 쿼리는 다시
eval테이블 함수를 사용할 수 없습니다. eval은remote('host', eval(...))처럼 다른 테이블 함수의 인자로 사용할 수 없습니다. 생성된 쿼리를 원격 서버에서 실행하려면view로 감싸세요:remote('host', view(SELECT * FROM eval(...))).- 인자는 행이나 블록마다가 아니라 쿼리가 분석되는 동안 한 번 평가됩니다.
- 외부 쿼리 로그에는
eval을 포함한 원래 쿼리가 기록됩니다. 생성된SELECT쿼리는 별도의 사용자 쿼리로 기록되지 않습니다.
더 알아보기 (Learn more)
view테이블 함수allow_experimental_eval_table_function설정