Snowflake

[Snowflake] Sequence

비번변경 2024. 8. 5. 11:41

개요

이번 글에서는 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