CREATE SEQUENCE

連続した一意の番号を生成するために使用できる新しいシーケンスを作成します。

重要

Snowflakeでは、ギャップのないシーケンス番号の生成は保証されません。生成される数字は必ずしも連続しているとは限りません。

詳細については、 シーケンスの使用 をご参照ください。

こちらもご参照ください。

DROP SEQUENCEALTER SEQUENCESHOW SEQUENCESDESCRIBE 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の補数整数で表すことができるゼロ以外の値です。

デフォルト: 1

{ ORDER | NOORDER }

シーケンスのために生成される値を 昇順または降順 に生成するかどうかを指定します。

  • ORDER は、シーケンスまたは自動増分列に対して生成される値が、昇順(または、間隔が負の値の場合は降順)であることを指定します。

    たとえば、シーケンスまたは自動増分の列に START 1 INCREMENT 2 がある場合、生成される値は 13579 などです。

  • NOORDER は、値が昇順であることが保証されないことを指定します。

    たとえば、シーケンスに START 1 INCREMENT 2 がある場合、生成される値は 131015103 などです。

    NOORDER は、複数の INSERT 操作を同時に実行する必要がある場合(例: 複数のクライアントが複数の INSERT ステートメントを実行する場合)に、パフォーマンスを向上させることができます。

デフォルト: NOORDER_SEQUENCE_AS_DEFAULT パラメーターは、デフォルトで設定されるプロパティを決定します。

COMMENT = 'string_literal'

シーケンスのコメントを指定します。

デフォルト: 値なし

アクセス制御の要件

この操作の実行に使用される ロール には、少なくとも次の 権限 が必要です。

権限

オブジェクト

注意

CREATE SEQUENCE

スキーマ

スキーマ内のオブジェクトに対して操作を実行するには、親データベースとスキーマに対する USAGE 権限が必要です。スキーマに対する 任意の権限を付与されたロールは、そのロールがスキーマを解決できることに注意してください。たとえば、スキーマに対するCREATE権限を付与されたロールは、そのスキーマにオブジェクトを作成できますが、そのスキーマに対するUSAGE*も*付与されている必要はありません。

指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。

セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。

使用上の注意

  • シーケンスの作成後には、シーケンスの最初/初期値は変更できません。

  • シーケンスは、ギャップのないシーケンスを必ずしも生成しません。値は(制限に達するまで)増加し、一意ですが、必ずしも連続しているとは限りません。上限と下限などの詳細については、 シーケンスのセマンティクス をご参照ください。

  • メタデータについて、

    注意

    Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。

  • OR REPLACE 句と IF NOT EXISTS 句は互いに排他的です。この2つを同じステートメントで使うことはできません。

  • 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

その他の例は シーケンスの使用 にあります。