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>' ]
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
bis2^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ächstenn-1
-Werte bei jedem Sequenzaufruf reserviert.Für das negative Sequenzintervall
-n
werden die nächstniedrigerenn-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).
Wenn beispielsweise eine Sequenz oder eine automatisch inkrementierte Spalte die Werte START 1 INCREMENT 2 hat, könnten die generierten Werte
1
,3
,5
,7
,9
usw. sein.NOORDER gibt an, dass nicht garantiert ist, dass die Werte in aufsteigender Reihenfolge sind.
Wenn beispielsweise eine Sequenz die Werte START 1 INCREMENT 2 hat, könnten die generierten Werte
1
,3
,101
,5
,103
usw. sein.NOORDER kann die Leistung verbessern, wenn mehrere Einfügeoperationen gleichzeitig ausgeführt werden müssen (z. B. wenn mehrere Clients mehrere INSERT-Anweisungen ausführen).
Standard: Der Parameter NOORDER_SEQUENCE_AS_DEFAULT bestimmt, welche Eigenschaft standardmäßig eingestellt wird.
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.
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);SELECT seq_01.nextval; +---------+ | NEXTVAL | |---------| | 1 | +---------+Führen Sie dieselbe Abfrage erneut aus. Beachten Sie, wie sich die Sequenznummern ändern:
SELECT seq_01.nextval; +---------+ | NEXTVAL | |---------| | 2 | +---------+Verwenden Sie nun die Sequenz beim Einfügen in eine Tabelle:
INSERT INTO sequence_test_table (i) VALUES (seq_01.nextval);SELECT i FROM sequence_test_table; +---+ | I | |---| | 3 | +---+
Erstellen Sie eine Sequenz, die um 5 statt um 1 erhöht wird:
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 | +---+---+----+----+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 | +----+----+----+----+
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;SELECT i FROM sequence_demo ORDER BY i LIMIT 10; +----+ | I | |----| | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | +----+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 | +----------+-------------------+
Weitere Beispiele finden Sie unter Verwenden von Sequenzen.