SET VARIABLE과 RESET VARIABLE 문

SET VARIABLE과 RESET VARIABLE 문

DuckDB는 SET VARIABLERESET VARIABLE 문을 사용해 SQL 레벨 변수를 정의하는 것을 지원해요. 쿼리에서 재사용할 값을 변수로 저장해 두면 편리하답니다. 함께 알아볼게요.

출처: 문서

본문

변수 범위

DuckDB는 두 가지 수준의 변수 범위를 지원해요.

범위 설명
SESSION SESSION 범위의 변수는 여러분에게 로컬이며 현재 세션에만 영향을 줘요.
GLOBAL GLOBAL 범위의 변수는 전체 DuckDB 인스턴스와 모든 세션에 영향을 주는 특정 구성 옵션 변수예요. 예를 들어 Set a Global Variable을 참고해 주세요.

SET VARIABLE

SET VARIABLE 문은 변수에 값을 할당하며, getvariable 호출로 접근할 수 있어요.

SET VARIABLE my_var = 30;
SELECT 20 + getvariable('my_var') AS total;
total
50

기존 변수에 SET VARIABLE을 실행하면 그 값을 덮어써요.

SET VARIABLE my_var = 30;
SET VARIABLE my_var = 100;
SELECT 20 + getvariable('my_var') AS total;
total
120

변수는 서로 다른 타입을 가질 수 있어요.

SET VARIABLE my_date = DATE '2018-07-13';
SET VARIABLE my_string = 'Hello world';
SET VARIABLE my_map = MAP {'k1': 10, 'k2': 20};

변수는 쿼리 결과에 할당할 수도 있어요.

-- CSV 파일 몇 개 쓰기
COPY (SELECT 42 AS a) TO 'test1.csv';
COPY (SELECT 84 AS a) TO 'test2.csv';

-- CSV 파일 목록을 테이블에 추가
CREATE TABLE csv_files (file VARCHAR);
INSERT INTO csv_files VALUES ('test1.csv'), ('test2.csv');

-- CSV 파일 목록으로 변수 초기화
SET VARIABLE list_of_files = (SELECT list(file) FROM csv_files);

-- CSV 파일 읽기
SELECT * FROM read_csv(getvariable('list_of_files'), filename := True);
a filename
42 test.csv
84 test2.csv

변수가 설정되지 않으면 getvariable 함수는 NULL을 반환해요.

SELECT getvariable('undefined_var') AS result;
result
NULL

getvariable 함수는 COLUMNS 표현식에서도 쓸 수 있어요.

SET VARIABLE column_to_exclude = 'col1';
CREATE TABLE tbl AS SELECT 12 AS col0, 34 AS col1, 56 AS col2;
SELECT COLUMNS(c -> c != getvariable('column_to_exclude')) FROM tbl;
col0 col2
12 56

문법

RESET VARIABLE

RESET VARIABLE 문은 변수를 해제(unset)해요.

SET VARIABLE my_var = 30;
RESET VARIABLE my_var;
SELECT getvariable('my_var') AS my_var;
my_var
NULL

문법

더 알아보기 (Learn more)

  • 구성 옵션 변수는 configuration/overview 문서의 전역 구성 옵션을 참고해 주세요.