CREATE SEQUENCE

Erstellt eine neue Sequenz, die zur Generierung von fortlaufenden, eindeutigen Nummern verwendet werden kann.

Wichtig

Snowflake garantiert nicht, dass die Generierung von Sequenznummern ohne Lücken erfolgt. Die generierten Zahlen sind nicht unbedingt zusammenhängend.

Weitere Details dazu finden Sie unter Verwenden von Sequenzen.

Siehe auch:

DROP SEQUENCE, ALTER SEQUENCE, SHOW SEQUENCES, DESCRIBE SEQUENCE

Syntax

CREATE [ OR REPLACE ] SEQUENCE [ IF NOT EXISTS ] <name>
  [ WITH ]
  [ START [ WITH ] [ = ] <initial_value> ]
  [ INCREMENT [ BY ] [ = ] <sequence_interval> ]
  [ { ORDER | NOORDER } ]
  [ COMMENT = '<string_literal>' ]
Copy

Erforderliche Parameter

name

Gibt den Bezeichner für die Sequenz an. Dieser muss für das Schema, in dem die Sequenz erstellt wird, eindeutig sein.

Darüber hinaus muss der Bezeichner mit einem Buchstaben beginnen und darf keine Leer- oder Sonderzeichen enthalten, es sei denn, die gesamte Bezeichnerzeichenfolge wird in doppelte Anführungszeichen gesetzt (z. B. "My object"). Bei Bezeichnern, die in doppelte Anführungszeichen eingeschlossen sind, ist auch die Groß-/Kleinschreibung zu beachten.

Weitere Informationen zu Bezeichnern finden Sie unter Anforderungen an Bezeichner.

Optionale Parameter

START [ WITH ] [ = ] initial_value

Gibt den ersten Wert an, der von der Sequenz zurückgegeben wird. Unterstützte Werte sind alle Werte, die durch eine 64-Bit-Zweierkomplement-Ganzzahl (-2^63 bis 2^63 - 1) dargestellt werden können.

Standard: 1

INCREMENT [ BY ] [ = ] sequence_interval

Gibt das Schrittintervall der Sequenz an:

  • Für das positive Sequenzintervall n werden die nächsten n-1-Werte bei jedem Sequenzaufruf reserviert.

  • Für das negative Sequenzintervall -n werden die nächstniedrigeren n-1-Werte bei jedem Sequenzaufruf reserviert.

Unterstützte Werte sind alle Nicht-Null-Werte, die durch eine 64-Bit-Zweierkomplement-Ganzzahl dargestellt werden können.

Standard: 1

{ ORDER | NOORDER }

Gibt an, ob die Werte in aufsteigender oder absteigender Sequenz generiert werden oder nicht.

  • ORDER gibt an, dass die Werte, die für eine Sequenz oder eine automatisch inkrementierte Spalte generiert werden, in aufsteigender Reihenfolge sind (oder, wenn das Intervall einen negativen Wert hat, in abnehmender Reihenfolge).

  • NOORDER gibt an, dass nicht garantiert ist, dass die Werte in einer Reihenfolge sind.

Standard: ORDER

COMMENT = 'string_literal'

Gibt einen Kommentar zur Sequenz an.

Standard: Kein Wert

Anforderungen an die Zugriffssteuerung

Eine Rolle, die zur Ausführung dieses SQL-Befehls verwendet wird, muss mindestens die folgenden Berechtigungen haben:

Berechtigung

Objekt

Anmerkungen

CREATE SEQUENCE

Schema

Beachten Sie, dass für die Bearbeitung eines Objekts in einem Schema auch die Berechtigung USAGE für die übergeordnete Datenbank und das Schema erforderlich ist.

Eine Anleitung zum Erstellen einer kundenspezifischen Rolle mit einer bestimmten Gruppe von Berechtigungen finden Sie unter Erstellen von kundenspezifischen Rollen.

Allgemeine Informationen zu Rollen und Berechtigungen zur Durchführung von SQL-Aktionen auf sicherungsfähigen Objekten finden Sie unter Übersicht zur Zugriffssteuerung.

Nutzungshinweise

  • Der Anfangswert einer Sequenz kann nach dem Erstellen der Sequenz nicht mehr geändert werden.

  • Eine Sequenz erzeugt nicht unbedingt eine lückenlose Sequenz. Die Werte nehmen zu (bis das Limit erreicht ist) und sind eindeutig, aber nicht unbedingt zusammenhängend. Weitere Informationen, einschließlich der Ober- und Untergrenzen, finden Sie unter Semantik von Sequenzen.

  • Hinweis zu Metadaten:

    Achtung

    Kunden müssen sicherstellen, dass bei der Nutzung des Snowflake-Dienstes keine personenbezogenen Daten (außer für ein Objekt „Benutzer“), sensible Daten, exportkontrollierte Daten oder andere regulierte Daten als Metadaten eingegeben werden. Weitere Informationen dazu finden Sie unter Metadatenfelder in Snowflake.

  • CREATE OR REPLACE <Objekt>-Anweisungen sind atomar. Das heißt, wenn ein Objekt ersetzt wird, erfolgt das Löschen des alten Objekts und das Erstellen des neuen Objekts in einer einzigen Transaktion.

Beispiele

Hier ist ein einfaches Beispiel für die Verwendung von Sequenzen:

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

Führen Sie dieselbe Abfrage erneut aus. Beachten Sie, wie sich die Sequenznummern ändern:

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

Verwenden Sie nun die Sequenz beim Einfügen in eine Tabelle:

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

Erstellen Sie eine Sequenz, die um 5 statt um 1 erhöht wird:

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

Führen Sie dieselbe Abfrage erneut aus. Beachten Sie, wie sich die Sequenznummern ändern. Sie könnten erwarten, dass der nächste Satz von Sequenznummern mit einer Nummer beginnt, die um 5 höher ist als die Nummer, mit der die vorherige Anweisung aufgehört hat. Die nächste Sequenznummer beginnt jedoch mit einer um 20 höheren Zahl (5 * 4, wobei 5 die Größe des Inkrements und 4 die Anzahl der NEXTVAL-Operationen in der Anweisung ist):

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

Im folgenden Beispiel wird veranschaulicht, dass Sie eine Sequenz als Standardwert für eine Spalte verwenden können, um für jede Zeile einer Tabelle eindeutige Bezeichner bereitzustellen:

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

Diese Abfrage zeigt, dass jede Zeile in der Tabelle einen diskreten Wert hat:

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

Weitere Beispiele finden Sie unter Verwenden von Sequenzen.