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 ...))와 동일하므로, 쿼리는 정확히 한 행과 한 컬럼을 반환해야 합니다.

표현식의 값은 다음 타입 중 하나여야 합니다:

  • String
  • Nullable(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 테이블 함수를 사용할 수 없습니다.
  • evalremote('host', eval(...))처럼 다른 테이블 함수의 인자로 사용할 수 없습니다. 생성된 쿼리를 원격 서버에서 실행하려면 view로 감싸세요: remote('host', view(SELECT * FROM eval(...))).
  • 인자는 행이나 블록마다가 아니라 쿼리가 분석되는 동안 한 번 평가됩니다.
  • 외부 쿼리 로그에는 eval을 포함한 원래 쿼리가 기록됩니다. 생성된 SELECT 쿼리는 별도의 사용자 쿼리로 기록되지 않습니다.

더 알아보기 (Learn more)