Zurück zum Hub
Snowflake

Snowflake Sequence Generator

Snowflake-Sequenzen sind Datenbankobjekte, keine ETL-Transformationen. Sie sind nützlich, wenn das Warehouse die erzeugten IDs besitzen soll.

Einsatzzeitpunkt
  • Verwenden Sie `CREATE SEQUENCE`, wenn die Schlüsselerzeugung in der Datenbankschicht liegt.
  • Rufen Sie `NEXTVAL` in INSERTs, MERGEs oder Default-Ausdrücken auf, wenn neue Zeilen eindeutige numerische IDs benötigen.
  • Bevorzugen Sie eine Sequenz pro Schlüsseldomäne, damit ID-Bereiche nachvollziehbar bleiben.
Wichtige Syntax
SyntaxZweckBeispiel
CREATE SEQUENCESequenzobjekt definieren.CREATE SEQUENCE customer_seq START = 1 INCREMENT = 1;
NEXTVALFortschreiten und nächsten Wert zurückgeben.customer_seq.NEXTVAL
ALTER SEQUENCEVerhalten später anpassen.ALTER SEQUENCE customer_seq SET INCREMENT = 10;
Warehouse-eigener Schlüssel-Flow
  1. 1Erstellen Sie das Sequenzobjekt im Schema der Zieltabelle.
  2. 2Referenzieren Sie `sequence_name.NEXTVAL` im INSERT- oder MERGE-Statement.
  3. 3Stellen Sie sicher, dass nachgelagertes ETL keinen konkurrierenden Schlüssel erzeugt.
  4. 4Dokumentieren Sie den Sequenzeigentümer, damit Ladevorgänge und DDL konsistent bleiben.
Code

Sequenz erstellen und verwenden

CREATE OR REPLACE SEQUENCE customer_seq START = 1 INCREMENT = 1;

INSERT INTO dim_customer (customer_key, customer_name)
SELECT customer_seq.NEXTVAL, customer_name
FROM stg_customer;
FAQ

Warum gibt es Lücken in den Sequenzwerten?

Lücken sind normal. Eindeutigkeit ist wichtiger als eine perfekt zusammenhängende Nummerierung.

Sollten ETL und Snowflake beide Schlüssel erzeugen?

Nein. Wählen Sie einen Eigentümer für den Surrogatschlüssel-Lebenszyklus, sonst driftet das Modell auseinander.

Kann ich eine Snowflake-Sequenz als Primary-Key-Default verwenden?

Ja. Setzen Sie das Sequenz-NEXTVAL als Default-Wert einer Spalte: `ALTER TABLE t ALTER COLUMN id SET DEFAULT seq.NEXTVAL`. Damit wandert die Schlüsselerzeugung für alle INSERT-Operationen in die Datenbankschicht.

Wie setze ich eine Sequenz nach dem Truncate der Zieltabelle zurück?

Verwenden Sie `ALTER SEQUENCE seq_name SET VALUE = 0`, um auf den Anfangswert zurückzusetzen. Der nächste NEXTVAL-Aufruf liefert den START-Wert (bzw. START + INCREMENT, falls SET VALUE darüber liegt).

Verwandt