Un entrepôt de données bien conçu est le fondement d'une analytics fiable. Malgré l'engouement pour les paradigmes plus récents, les principes fondamentaux de modélisation dimensionnelle, d'architecture en couches et de suivi des changements restent essentiels. Cet article couvre l'approche moderne de la conception d'entrepôt.
Architecture en Couches : Du Staging au Mart
┌─────────────────────────────────────────────────────────────────┐
│ CONSOMMATEURS │
│ Dashboards SQL Ad-hoc Features ML Reverse ETL │
└────────────────────────┬────────────────────────────────────────┘
│
┌────────────────────────▼────────────────────────────────────────┐
│ COUCHE MART (Gold) │
│ Tables prêtes pour le business, documentées, gouvernées │
│ Préfixes: fct_, dim_, rpt_, agg_ │
└────────────────────────┬────────────────────────────────────────┘
│
┌────────────────────────▼────────────────────────────────────────┐
│ COUCHE INTERMÉDIAIRE (Silver) │
│ Nettoyées, typées, dédupliquées, logique métier appliquée │
│ Préfixe: int_ │
└────────────────────────┬────────────────────────────────────────┘
│
┌────────────────────────▼────────────────────────────────────────┐
│ COUCHE STAGING (Bronze) │
│ Miroir 1:1 de la source, transformation minimale, append-only │
│ Préfixe: stg_ │
└─────────────────────────────────────────────────────────────────┘
Principes de Conception par Couche
| Couche | Objectif | Matérialisation | Fraîcheur | Accès |
|---|
| Staging (Bronze) | Miroir source brut | Incremental append / vue | Temps réel à horaire | Data engineers |
| Intermédiaire (Silver) | Nettoyer, dédupliquer, typer | Incremental ou table | Horaire à quotidien | Engineers + analystes |
| Mart (Gold) | Entités prêtes pour le business | Table (matérialisée) | Planifié (SLO) | Tous consommateurs |
Comparaison des Types de Dimensions à Évolution Lente (SCD)
| Type SCD | Description | Cas d'Usage | Complexité | Impact Stockage | Historique |
|---|
| Type 0 | Aucun changement suivi | Données de référence statiques | Aucune | Minimal | Aucun |
| Type 1 | Écraser l'ancienne valeur | Corrections, attributs non historiques | Faible | Minimal | Perdu |
| Type 2 | Ajouter ligne avec dates de validité | Historique complet requis | Moyenne | Élevé | Complet |
| Type 3 | Ajouter colonne pour valeur précédente | Seulement actuel + précédent | Faible | Modéré | Limité |
| Type 6 | Hybride (1 + 2 + 3) | Besoin flag actuel + historique + précédent | Élevée | Élevé | Complet |
Matrice de Stratégie de Matérialisation
| Stratégie | Quand Utiliser | Avantages | Inconvénients | Config dbt |
|---|
| View | Staging, transformations légères | Pas de coût stockage, toujours frais | Requêtes lentes | materialized='view' |
| Table | Marts, agrégations lourdes | Requêtes rapides, prévisible | Rebuild complet | materialized='table' |
| Incremental | Grandes tables de faits | Builds rapides, coût faible | Logique complexe | materialized='incremental' |
| Ephemeral | CTEs, logique réutilisable | Pas d'objet créé | Debugging plus difficile | materialized='ephemeral' |
| Snapshot | Suivi SCD Type 2 | Historique automatique | Requiert clé unique + timestamp | dbt snapshot |
Cadre de Convention de Nommage
| Type d'Objet | Pattern | Exemple | Notes |
|---|
| Modèle staging | stg_{source}_{entite} | stg_stripe_payments | Un par table source |
| Modèle intermédiaire | int_{entite}_{verbe} | int_orders_enriched | Verbe décrit la transformation |
| Table de faits | fct_{événement} | fct_orders | Grain = un événement |
| Table de dimension | dim_{entité} | dim_customers | Grain = une entité |
| Rapport/agrégat | rpt_{sujet} ou agg_{sujet} | rpt_monthly_revenue | Pré-calculé pour BI |
| Clé de substitution | sk_{entité}_id | sk_customer_id | Auto-générée |
| Clé naturelle | nk_{entité}_id | nk_customer_id | Du système source |
| Timestamps | {événement}_at | created_at | Toujours UTC |
| Booléens | is_{condition} ou has_{chose} | is_active | Intention claire |
Ressources