CREATE SEQUENCE¶
순차적인 고유 번호 생성에 사용할 수 있는 새 시퀀스를 만듭니다.
중요
Snowflake는 간격이 없는 시퀀스 번호가 생성됨을 보장하지 않습니다. 생성된 숫자가 반드시 연속적일 필요는 없습니다.
자세한 내용은 시퀀스 사용하기 섹션을 참조하십시오.
- 참고 항목:
DROP SEQUENCE , ALTER SEQUENCE , SHOW SEQUENCES , DESCRIBE SEQUENCE
구문¶
CREATE [ OR REPLACE ] SEQUENCE [ IF NOT EXISTS ] <name>
[ WITH ]
[ START [ WITH ] [ = ] <initial_value> ]
[ INCREMENT [ BY ] [ = ] <sequence_interval> ]
[ { ORDER | NOORDER } ]
[ COMMENT = '<string_literal>' ]
필수 매개 변수¶
name
시퀀스에 대한 식별자를 지정하는데, 시퀀스가 생성된 스키마에 대해 고유한 식별자여야 합니다.
또한, 식별자는 알파벳 문자로 시작해야 하며 전체 식별자 문자열을 큰따옴표(예:
"My object"
)로 묶지 않는 한 공백이나 특수 문자를 포함할 수 없습니다. 큰따옴표로 묶인 식별자도 대/소문자를 구분합니다.식별자에 대한 자세한 내용은 식별자 요구 사항 섹션을 참조하십시오.
선택적 매개 변수¶
START [ WITH ] [ = ] initial_value
시퀀스에서 반환되는 첫 번째 값을 지정합니다. 64비트 2의 보수 정수로 나타낼 수 있는 모든 값이 지원됩니다(
-2^63
~2^63 - 1
).기본값:
1
INCREMENT [ BY ] [ = ] sequence_interval
시퀀스의 단계 간격을 지정합니다.
양의 시퀀스 간격
n
의 경우, 그다음n-1
값은 각 시퀀스 호출에 의해 예약됩니다.음의 시퀀스 간격
-n
의 경우, 그다음으로 낮은n-1
값은 각 시퀀스 호출에 의해 예약됩니다.
지원되는 값은 64비트 2의 보수 정수로 나타낼 수 있는, 0이 아닌 값입니다.
기본값:
1
{ ORDER | NOORDER }
값이 오름차순 또는 내림차순 으로 시퀀스에 대해 생성되는지 여부를 지정합니다.
ORDER를 지정하면 시퀀스 또는 자동 증분 열에 대해 생성되는 값이 오름차순(또는 간격이 음수 값인 경우에는 내림차순)으로 표시됩니다.
예를 들어 시퀀스 또는 자동 증가 열에 START 1 INCREMENT 2가 있는 경우 생성된 값은
1
,3
,5
,7
,9
등이 될 수 있습니다.NOORDER를 지정하면 값이 오름차순으로 표시되도록 보장되지 않습니다.
예를 들어 시퀀스에 START 1 INCREMENT 2가 있는 경우 생성된 값은
1
,3
,101
,5
,103
등이 될 수 있습니다.NOORDER는 여러 삽입 작업을 동시에 수행해야 하는 경우(예: 여러 클라이언트가 여러 INSERT 문을 실행하는 경우) 성능을 향상시킬 수 있습니다.
기본값: NOORDER_SEQUENCE_AS_DEFAULT 매개 변수에 따라 기본적으로 설정되는 속성이 결정됩니다.
COMMENT = 'string_literal'
시퀀스에 대한 설명을 지정합니다.
기본값: 값 없음
액세스 제어 요구 사항¶
이 SQL 명령을 실행하는 데 사용되는 역할 에는 최소한 다음 권한 이 있어야 합니다.
권한 |
오브젝트 |
참고 |
---|---|---|
CREATE SEQUENCE |
스키마 |
스키마의 모든 오브젝트에 대해 작업하려면 상위 데이터베이스 및 스키마에 대한 USAGE 권한도 필요합니다.
지정된 권한 세트로 사용자 지정 역할을 만드는 방법에 대한 지침은 사용자 지정 역할 만들기 섹션을 참조하십시오.
보안 오브젝트 에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여에 대한 일반적인 정보는 액세스 제어의 개요 섹션을 참조하십시오.
사용법 노트¶
시퀀스가 생성된 후에는 시퀀스의 첫 번째 값/초기값을 변경할 수 없습니다.
시퀀스가 반드시 갭이 없는 시퀀스를 생성하는 것은 아닙니다. 값은 (한계에 이를 때까지) 증가하고 고유하지만, 꼭 연속적일 필요는 없습니다. 상한과 하한을 포함한 자세한 내용은 시퀀스 의미 체계 를 참조하십시오.
메타데이터 관련:
주의
고객은 Snowflake 서비스를 사용할 때 개인 데이터(사용자 오브젝트 제외), 민감한 데이터, 수출 통제 대상 데이터 또는 기타 규제 데이터가 메타데이터로 입력되지 않도록 해야 합니다. 자세한 내용은 Snowflake의 메타데이터 필드 섹션을 참조하십시오.
CREATE OR REPLACE <오브젝트> 문은 원자성입니다. 즉, 오브젝트가 바뀔 때 단일 트랜잭션으로 이전 오브젝트가 삭제되고 새 오브젝트가 생성됩니다.
예¶
다음은 시퀀스를 사용하는 간단한 예입니다.
CREATE OR REPLACE SEQUENCE seq_01 START = 1 INCREMENT = 1; CREATE OR REPLACE TABLE sequence_test_table (i INTEGER);SELECT seq_01.nextval; +---------+ | NEXTVAL | |---------| | 1 | +---------+같은 쿼리를 다시 실행하고 시퀀스 번호가 어떻게 바뀌는지 확인합니다.
SELECT seq_01.nextval; +---------+ | NEXTVAL | |---------| | 2 | +---------+이제 테이블에 삽입하는 동안 시퀀스를 사용합니다.
INSERT INTO sequence_test_table (i) VALUES (seq_01.nextval);SELECT i FROM sequence_test_table; +---+ | I | |---| | 3 | +---+
1이 아닌 5씩 증가하는 시퀀스를 만듭니다.
CREATE OR REPLACE SEQUENCE seq_5 START = 1 INCREMENT = 5;SELECT seq_5.nextval a, seq_5.nextval b, seq_5.nextval c, seq_5.nextval d; +---+---+----+----+ | A | B | C | D | |---+---+----+----| | 1 | 6 | 11 | 16 | +---+---+----+----+같은 쿼리를 다시 실행하고 시퀀스 번호가 어떻게 바뀌는지 확인합니다. 다음 시퀀스 번호 세트가 중단된 이전 문보다 5 더 높은 번호부터 시작될 것으로 예상할 수 있습니다. 하지만 다음 시퀀스 번호는 20 더 높은 번호부터 시작합니다(5 * 4, 여기서 5는 증분의 크기이고 4는 문에서
NEXTVAL
작업의 수임).SELECT seq_5.nextval a, seq_5.nextval b, seq_5.nextval c, seq_5.nextval d; +----+----+----+----+ | A | B | C | D | |----+----+----+----| | 36 | 41 | 46 | 51 | +----+----+----+----+
이 예에서는 시퀀스를 열의 기본값으로 사용하여 테이블의 각 행에 대한 고유 식별자를 제공할 수 있음을 보여줍니다.
CREATE OR REPLACE SEQUENCE seq90; CREATE OR REPLACE TABLE sequence_demo (i INTEGER DEFAULT seq90.nextval, dummy SMALLINT); INSERT INTO sequence_demo (dummy) VALUES (0); -- Keep doubling the number of rows: INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo; INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo; INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo; INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo; INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo; INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo; INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo; INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo; INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo; INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;SELECT i FROM sequence_demo ORDER BY i LIMIT 10; +----+ | I | |----| | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | +----+이 쿼리는 테이블의 각 행에 고유한 값이 있음을 보여줍니다.
SELECT COUNT(i), COUNT(DISTINCT i) FROM sequence_demo; +----------+-------------------+ | COUNT(I) | COUNT(DISTINCT I) | |----------+-------------------| | 1024 | 1024 | +----------+-------------------+
시퀀스 사용하기 에서 더 많은 예를 확인할 수 있습니다.