허브로 돌아가기
Snowflake

Snowflake 시퀀스 생성기

Snowflake 시퀀스는 ETL 변환이 아니라 데이터베이스 객체입니다. 웨어하우스가 생성 ID를 소유해야 할 때 유용합니다.

사용 시점
  • 키 생성이 데이터베이스 계층의 책임일 때 `CREATE SEQUENCE`를 사용합니다.
  • 새 행에 고유한 숫자 ID가 필요할 때 INSERT, MERGE, 기본값 표현식에서 `NEXTVAL`을 호출합니다.
  • 키 범위를 명확히 관리하기 위해 키 도메인마다 시퀀스를 하나씩 두는 것이 좋습니다.
주요 구문
구문용도예시
CREATE SEQUENCE시퀀스 객체를 정의합니다.CREATE SEQUENCE customer_seq START = 1 INCREMENT = 1;
NEXTVAL다음 값으로 전진해 반환합니다.customer_seq.NEXTVAL
ALTER SEQUENCE나중에 동작을 조정합니다.ALTER SEQUENCE customer_seq SET INCREMENT = 10;
웨어하우스 소유 키 흐름
  1. 1타깃 테이블을 소유한 스키마에서 시퀀스 객체를 생성합니다.
  2. 2INSERT 또는 MERGE 문에서 `sequence_name.NEXTVAL`을 참조합니다.
  3. 3다운스트림 ETL이 경쟁하는 키를 동시에 생성하지 않는지 확인합니다.
  4. 4로드와 DDL이 어긋나지 않도록 시퀀스 소유자를 문서화해 둡니다.
코드

시퀀스 생성과 사용

CREATE OR REPLACE SEQUENCE customer_seq START = 1 INCREMENT = 1;

INSERT INTO dim_customer (customer_key, customer_name)
SELECT customer_seq.NEXTVAL, customer_name
FROM stg_customer;
FAQ

시퀀스 값에 공백이 생기는 이유는?

공백은 정상입니다. 완벽한 연속성보다 유일성이 더 중요합니다.

ETL과 Snowflake가 모두 키를 생성해야 하나요?

아닙니다. 대리 키 수명주기의 소유자를 하나로 정해야 모델이 어긋나지 않습니다.

Snowflake 시퀀스를 기본 키의 기본값으로 쓸 수 있나요?

가능합니다. 시퀀스 NEXTVAL을 열의 기본값으로 지정하세요: `ALTER TABLE t ALTER COLUMN id SET DEFAULT seq.NEXTVAL`. 그러면 모든 INSERT의 키 생성이 데이터베이스 계층으로 이동합니다.

타깃 테이블을 TRUNCATE한 뒤 시퀀스를 재설정하려면?

`ALTER SEQUENCE seq_name SET VALUE = 0`으로 초기값으로 재설정합니다. 다음 NEXTVAL 호출은 START 값을 반환하며(SET VALUE가 START보다 크면 START + INCREMENT를 반환).

관련 링크