Dimensions à variation lente (SCD)
Une SCD gère les attributs de dimension qui changent rarement, comme la ville d'un client. Le type 1 écrase la valeur, le type 2 garde chaque version pour analyser le passé tel qu'il était.
- slowly changing dimension
- type 1
- type 2
- historique
- valide_du
- valide_au
- snapshot
Syntaxe
Type 1 : on écrase l'ancienne valeur → pas d'historique UPDATE dim SET attribut = :nouveau WHERE cle_metier = :cle;Type 2 : on ferme la version en cours et on en ajoute une UPDATE dim SET valide_au = :date, est_courante = 0 WHERE cle_metier = :cle AND est_courante = 1; INSERT INTO dim (cle_metier, attribut, valide_du, valide_au, est_courante) VALUES (:cle, :nouveau, :date, NULL, 1);Intervalle semi-ouvert : valide_du <= jour < valide_au (NULL = toujours en cours)Exemple
CREATE TABLE dim_client ( client_sk INTEGER PRIMARY KEY, -- clé de substitution client_id TEXT, -- clé métier ville TEXT, valide_du TEXT, valide_au TEXT, -- NULL = version en cours est_courante INTEGER);INSERT INTO dim_client VALUES (1, 'C42', 'Lyon', '2024-03-01', NULL, 1);-- Le client C42 déménage à Bordeaux le 2026-10-15 : type 2UPDATE dim_client SET valide_au = '2026-10-15', est_courante = 0WHERE client_id = 'C42' AND est_courante = 1;INSERT INTO dim_client (client_id, ville, valide_du, valide_au, est_courante)VALUES ('C42', 'Bordeaux', '2026-10-15', NULL, 1);SELECT * FROM dim_client;-- 1 | C42 | Lyon | 2024-03-01 | 2026-10-15 | 0-- 2 | C42 | Bordeaux | 2026-10-15 | NULL | 1-- Une vente du 2026-09-20 reste rattachée à la version lyonnaiseSELECT client_sk, ville FROM dim_clientWHERE client_id = 'C42' AND valide_du <= '2026-09-20' AND (valide_au > '2026-09-20' OR valide_au IS NULL);-- 1 | LyonÀ retenir
- Choisissez le type attribut par attribut : une faute de frappe corrigée dans un nom relève du type 1, un changement de ville ou de segment commercial qui doit peser sur les analyses relève du type 2.
- Au chargement d'un fait, recherchez la version valide à la date du fait et stockez sa clé de substitution : la jointure ultérieure ne dépend plus des dates.
- Dans dbt, les snapshots produisent un type 2 automatiquement à partir d'une colonne de date de mise à jour ou d'une comparaison de colonnes.
- Piège : fermer l'ancienne version et ouvrir la nouvelle avec des bornes incluses des deux côtés. Le jour du changement appartient alors aux deux versions et les faits de ce jour sont comptés en double.
Voir aussi
- Modélisation dimensionnelle : faits et dimensionsLe schéma en étoile place les mesures dans une table de faits entourée de dimensions descriptives. On le choisit pour des tableaux de bord simples à requêter et rapides à agréger.
- Capture des changements (CDC)La CDC lit le journal de transactions de la base source pour émettre chaque insertion, modification et suppression. On l'utilise pour répliquer en quasi temps réel sans requêter les tables.
- dbt : modèles, ref, sources et testsdbt transforme des requêtes SELECT versionnées en tables ou vues, dans le bon ordre et avec des tests. On l'emploie pour organiser la couche de transformation d'un entrepôt en ELT.