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>' ]
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

{ ORDER | NOORDER }

값이 오름차순 또는 내림차순 으로 시퀀스에 대해 생성되는지 여부를 지정합니다.

  • ORDER를 지정하면 시퀀스 또는 자동 증분 열에 대해 생성되는 값이 오름차순(또는 간격이 음수 값인 경우에는 내림차순)으로 표시됩니다.

  • NOORDER를 지정하면 값이 어떤 순서대로 표시되도록 보장되지 않습니다.

기본값: ORDER

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

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