Snowflake Sequence Generator
Snowflake-Sequenzen sind Datenbankobjekte, keine ETL-Transformationen. Sie sind nützlich, wenn das Warehouse die erzeugten IDs besitzen soll.
- 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.
| Syntax | Zweck | Beispiel |
|---|---|---|
| CREATE SEQUENCE | Sequenzobjekt definieren. | CREATE SEQUENCE customer_seq START = 1 INCREMENT = 1; |
| NEXTVAL | Fortschreiten und nächsten Wert zurückgeben. | customer_seq.NEXTVAL |
| ALTER SEQUENCE | Verhalten später anpassen. | ALTER SEQUENCE customer_seq SET INCREMENT = 10; |
- 1Erstellen Sie das Sequenzobjekt im Schema der Zieltabelle.
- 2Referenzieren Sie `sequence_name.NEXTVAL` im INSERT- oder MERGE-Statement.
- 3Stellen Sie sicher, dass nachgelagertes ETL keinen konkurrierenden Schlüssel erzeugt.
- 4Dokumentieren Sie den Sequenzeigentümer, damit Ladevorgänge und DDL konsistent bleiben.
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;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).