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> ]
  [ COMMENT = '<string_literal>' ]
Copy

필수 매개 변수

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

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);
Copy
SELECT seq_01.nextval;
+---------+
| NEXTVAL |
|---------|
|       1 |
+---------+
Copy

같은 쿼리를 다시 실행하고 시퀀스 번호가 어떻게 바뀌는지 확인합니다.

SELECT seq_01.nextval;
+---------+
| NEXTVAL |
|---------|
|       2 |
+---------+
Copy

이제 테이블에 삽입하는 동안 시퀀스를 사용합니다.

INSERT INTO sequence_test_table (i) VALUES (seq_01.nextval);
Copy
SELECT i FROM sequence_test_table;
+---+
| I |
|---|
| 3 |
+---+
Copy

1이 아닌 5씩 증가하는 시퀀스를 만듭니다.

CREATE OR REPLACE SEQUENCE seq_5 START = 1 INCREMENT = 5;
Copy
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 |
+---+---+----+----+
Copy

같은 쿼리를 다시 실행하고 시퀀스 번호가 어떻게 바뀌는지 확인합니다. 다음 시퀀스 번호 세트가 중단된 이전 문보다 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 |
+----+----+----+----+
Copy

이 예에서는 시퀀스를 열의 기본값으로 사용하여 테이블의 각 행에 대한 고유 식별자를 제공할 수 있음을 보여줍니다.

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;
Copy
SELECT i FROM sequence_demo ORDER BY i LIMIT 10;
+----+
|  I |
|----|
|  1 |
|  2 |
|  3 |
|  4 |
|  5 |
|  6 |
|  7 |
|  8 |
|  9 |
| 10 |
+----+
Copy

이 쿼리는 테이블의 각 행에 고유한 값이 있음을 보여줍니다.

SELECT COUNT(i), COUNT(DISTINCT i) FROM sequence_demo;
+----------+-------------------+
| COUNT(I) | COUNT(DISTINCT I) |
|----------+-------------------|
|     1024 |              1024 |
+----------+-------------------+
Copy

시퀀스 사용하기 에서 더 많은 예를 확인할 수 있습니다.