Retour au hub
Snowflake

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.

Quand l'utiliser
  • 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 importante
SyntaxeObjectifExemple
CREATE SEQUENCEDéfinir l'objet séquence.CREATE SEQUENCE customer_seq START = 1 INCREMENT = 1;
NEXTVALAvance et renvoie la valeur suivante.customer_seq.NEXTVAL
ALTER SEQUENCEAjuster le comportement plus tard.ALTER SEQUENCE customer_seq SET INCREMENT = 10;
Flux de clé possédé par l'entrepôt
  1. 1Créez l'objet séquence dans le schéma propriétaire de la table cible.
  2. 2Référencez `sequence_name.NEXTVAL` dans l'instruction INSERT ou MERGE.
  3. 3Vérifiez que l'ETL en aval ne génère pas en parallèle une clé concurrente.
  4. 4Documentez le propriétaire de la séquence pour garder les chargements et le DDL alignés.
Code

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;
FAQ

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).

En rapport