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の補数整数で表すことができるゼロ以外の値です。
デフォルト:
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 | +----------+-------------------+
その他の例は シーケンスの使用 にあります。