SET VARIABLE과 RESET VARIABLE 문
SET VARIABLE과 RESET VARIABLE 문
DuckDB는 SET VARIABLE과 RESET 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문서의 전역 구성 옵션을 참고해 주세요.