개요
이번 글에서는 Snowflake에서의 Sequence에 대해서 적어둔다.
Sequence
일종의 카운터로 전역적인 수준에서 고유한 값을 생성한다. 따라서 테이블 행에 대한 고유 ID를 만드는 데 사용될 수 있다. 다만 일반적으로 Sequence는 1씩 연속적으로 증가하는 방향으로 동작하는데, Snowflake에서는 연속적인 번호를 생성하지 않을 수도 있다.
생성
Sequence는 CREATE 문으로 생성할 수 있다. 시작값과 증가 수준 등을 지정하여 생성한다.
CREATE OR REPLACE SEQUENCE garden_plants.flowers.SEQ_AUTHOR_UID
start = 1 -- 시작 값
increment = 1 -- 증가 수준
order -- 연속적인 증가
comment = 'Use this to fill in AUTHOR_UID' -- 주석
;
참고로 ORDER 절을 추가하지 않으면 값이 연속적으로 증가하지 않는다. 기존에는 ORDER 속성이 기본으로 활성화되어 있었는데, 최근 비활성화하는 것으로 변경되었다고 한다.
생성한 Sequence는 아래와 같이 확인할 수 있다.
값 조회
Sequence는 nextval 속성으로 값을 조회할 수 있다.
SELECT garden_plants.flowers.SEQ_AUTHOR_UID.nextval;
Select를 할 때마다 갑이 증가되는 모습을 확인할 수 있을 것이다.
정보 조회
Sequence의 상태 등을 확인할 때는 SHOW 명령을 사용한다.
SHOW sequences;
사용
생성할 Sequence는 테이블에 값을 넣거나 테이블 컬럼의 기본값으로 지정하여 사용할 수 있다.
- 값 넣을 때 사용
INSERT INTO garden_plants.flowers.AUTHOR(AUTHOR_UID,FIRST_NAME,MIDDLE_NAME, LAST_NAME) VALUES
(garden_plants.flowers.SEQ_AUTHOR_UID.nextval, 'Laura', 'K','Egendorf')
, (garden_plants.flowers.SEQ_AUTHOR_UID.nextval, 'Jan', '','Grover')
, (garden_plants.flowers.SEQ_AUTHOR_UID.nextval, 'Jennifer', '','Clapp')
, (garden_plants.flowers.SEQ_AUTHOR_UID.nextval, 'Kathleen', '','Petelinsek');
- 기본값으로 사용
아래와 같이 테이블을 생성하면 INSERT 문을 수행할 때 AUTHOR_UID 값을 넣지 않아도 Sequence의 값으로 채워진다.
CREATE OR REPLACE TABLE garden_plants.flowers.AUTHOR (
AUTHOR_UID NUMBER DEFAULT garden_plants.flowers.SEQ_AUTHOR_UID.nextval
,FIRST_NAME VARCHAR(50)
,MIDDLE_NAME VARCHAR(50)
,LAST_NAME VARCHAR(50)
);
참고 문서
https://docs.snowflake.com/ko/user-guide/querying-sequences
https://docs.snowflake.com/en/sql-reference/sql/create-sequence