Snowflake Sequence Generator
Les séquences Snowflake sont des objets de base de données, pas des transformations ETL. Elles sont utiles lorsque l'entrepôt doit posséder les ID générés.
- Utilisez `CREATE SEQUENCE` quand la génération de clés relève de la couche base de données.
- Appelez `NEXTVAL` dans les INSERT, MERGE ou expressions par défaut lorsqu'une nouvelle ligne a besoin d'un ID numérique unique.
- Préférez une séquence par domaine de clés pour garder des plages d'ID faciles à raisonner.
| Syntaxe | Objectif | Exemple |
|---|---|---|
| CREATE SEQUENCE | Définir l'objet séquence. | CREATE SEQUENCE customer_seq START = 1 INCREMENT = 1; |
| NEXTVAL | Avance et renvoie la valeur suivante. | customer_seq.NEXTVAL |
| ALTER SEQUENCE | Ajuster le comportement plus tard. | ALTER SEQUENCE customer_seq SET INCREMENT = 10; |
- 1Créez l'objet séquence dans le schéma propriétaire de la table cible.
- 2Référencez `sequence_name.NEXTVAL` dans l'instruction INSERT ou MERGE.
- 3Vérifiez que l'ETL en aval ne génère pas en parallèle une clé concurrente.
- 4Documentez le propriétaire de la séquence pour garder les chargements et le DDL alignés.
Créer et utiliser une séquence
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;Pourquoi y a-t-il des trous dans les valeurs de séquence ?
Les trous sont normaux. L'unicité compte plus qu'une numérotation parfaitement continue.
ETL et Snowflake doivent-ils générer des clés tous les deux ?
Non. Choisissez un seul propriétaire pour le cycle de vie de la clé de substitution, sinon le modèle dérive.
Peut-on utiliser une séquence Snowflake comme valeur par défaut de clé primaire ?
Oui. Affectez le NEXTVAL de la séquence comme valeur par défaut d'une colonne : `ALTER TABLE t ALTER COLUMN id SET DEFAULT seq.NEXTVAL`. La génération de clé passe alors entièrement dans la couche base pour toutes les insertions.
Comment réinitialiser une séquence après un TRUNCATE de la table cible ?
Utilisez `ALTER SEQUENCE seq_name SET VALUE = 0` pour revenir à la valeur initiale. Le prochain NEXTVAL renvoie la valeur de START (ou START + INCREMENT si SET VALUE est plus grand).