Introduction a la Modelisation de Donnees

40 min Fondamental

Objectifs de cette lecon

  • Comprendre pourquoi la modelisation est le coeur du metier de Data Architect
  • Maitriser les 3 niveaux de modelisation : conceptuel, logique, physique
  • Differencier les approches OLTP vs OLAP
  • Identifier le role strategique du Data Architect dans la modelisation

La modelisation de donnees est LA competence fondamentale d'un Data Architect. Les technologies changent tous les 3-5 ans, mais les principes de modelisation restent valables depuis 40 ans. Un bon modele de donnees peut sauver un projet, un mauvais peut le couler. J'ai vu des entreprises depenser des millions pour re-architecturer des systemes dont le probleme fondamental etait un mauvais modele de donnees initial.

Pourquoi Modeliser ?

La modelisation de donnees est le processus de creation d'une representation structuree des donnees d'une organisation. C'est le blueprint d'un batiment - sans lui, vous construisez a l'aveugle.

Les 4 Objectifs de la Modelisation

1. Communication : Langage commun entre metier et technique.
2. Qualite : Contraintes qui garantissent l'integrite des donnees.
3. Performance : Structure optimisee pour les patterns d'acces.
4. Evolution : Fondation stable pour les changements futurs.

Les 3 Niveaux de Modelisation

Du Conceptuel au Physique
  Niveau Conceptuel (MCD)          Audience: Metier
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         "Quelles donnees ?"
  β”‚  Client  ──passe──> β”‚
  β”‚  Commande ──contientβ”‚         Entites, relations
  β”‚  Produit            β”‚         Pas de technique
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            β”‚ Transformation
            v
  Niveau Logique (MLD)             Audience: Analystes
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         "Comment structurer ?"
  β”‚  clients (id, nom)  β”‚
  β”‚  commandes (id, fk) β”‚         Tables, colonnes, FK
  β”‚  produits (id, prix)β”‚         Sans SGBD specifique
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            β”‚ Implementation
            v
  Niveau Physique (MPD)            Audience: DBA/Dev
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         "Comment implementer ?"
  β”‚  CREATE TABLE ...   β”‚
  β”‚  INDEX, PARTITION   β”‚         DDL, index, partitions
  β”‚  TABLESPACE, STATS  β”‚         Specifique au SGBD
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

OLTP vs OLAP

CritereOLTP (Transactionnel)OLAP (Analytique)
ObjectifOperations quotidiennesAnalyse et decisions
RequetesINSERT/UPDATE/DELETE simplesSELECT complexes avec aggregations
SchemaNormalise (3NF)Denormalise (Star/Snowflake)
Volume par requeteQuelques lignesMillions de lignes
UtilisateursMilliers (applications)Dizaines (analystes)
LatenceMillisecondesSecondes a minutes
ModelisationMerise/UML, 3NFKimball, Data Vault

Amazon - L'evolution du modele de donnees

Amazon a du completement revoir sa modelisation en 3 phases distinctes pour accompagner sa croissance de librairie en ligne a marketplace mondiale.

  • Phase 1 (1995-2003) : Oracle OLTP normalise - parfait pour une librairie
  • Phase 2 (2003-2010) : Migration vers des modeles denormalises + DynamoDB pour le panier
  • Phase 3 (2010+) : Architecture polyglot - chaque service son modele optimal
  • Lecon : Le modele de donnees doit evoluer AVEC le business, pas contre lui

Healthcare.gov - Echec de modelisation initiale

Le lancement catastrophique de Healthcare.gov en 2013 etait en grande partie du a un modele de donnees mal concu entre 5 agences gouvernementales.

  • Probleme : Aucun modele conceptuel partage entre les equipes
  • Impact : 6 millions de dollars de cout de remediation, des mois de retard
  • Lecon : Le modele conceptuel est non-negociable avant toute implementation

Le "Code First, Model Later"

Commencer a coder les tables SQL sans avoir fait de modelisation conceptuelle. On se retrouve avec des dizaines de tables sans coherence, des colonnes dupliquees, et des relations implicites dans le code applicatif.

Solution : Toujours commencer par un modele conceptuel (meme informel sur un whiteboard). 30 minutes de modelisation en amont economisent des semaines de refactoring en aval.

Votre premier jour comme Data Architect

Vous rejoignez une scale-up e-commerce en pleine croissance. Le CTO vous dit : "On a 50 microservices, chacun avec sa base PostgreSQL, et personne ne sait quelles donnees existent ou". Par ou commencez-vous ?

  • Etape 1 : Cartographie - inventorier toutes les bases existantes
  • Etape 2 : Modele conceptuel global - identifier les entites metier partagees
  • Etape 3 : Data Dictionary - documenter chaque attribut avec son proprietaire
  • Etape 4 : Governance - etablir les regles de modelisation pour les nouvelles tables
Quelle est la difference fondamentale entre un modele conceptuel et un modele logique ?
Le modele conceptuel decrit les entites metier et leurs relations SANS consideration technique (pas de types, pas de cles). Il est comprehensible par le metier. Le modele logique traduit ces entites en structures de tables avec colonnes, types, cles primaires et etrangeres, mais reste independant d'un SGBD specifique.

Modelisation Conceptuelle : Merise & UML

50 min Fondamental

Objectifs de cette lecon

  • Maitriser la methode Merise et le Modele Conceptuel de Donnees (MCD)
  • Savoir creer des diagrammes de classes UML pour les donnees
  • Comprendre les cardinalites et les differents types d'associations
  • Appliquer les regles de validation d'un modele conceptuel

Merise est une methode francaise qui reste extremement pertinente. Ne vous laissez pas dire que c'est "demode" - les principes de la modelisation conceptuelle sont universels. UML est plus international, mais l'idee est la meme : capturer la semantique metier avant de penser a la technique. Un bon MCD, c'est un contrat entre le metier et l'IT.

Merise - Le MCD

MCD E-commerce
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       1,n        0,n       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚  CLIENT  │──────PASSE──────────────────│ COMMANDE β”‚
  │──────────│                             │──────────│
  β”‚ nom      β”‚                             β”‚ date     β”‚
  β”‚ email    β”‚                             β”‚ statut   β”‚
  β”‚ adresse  β”‚                             β”‚ total    β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                             β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜
                                                β”‚
                                           1,n  β”‚  0,n
                                                β”‚
                                          β”Œβ”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”
                                          β”‚  CONTIENT  β”‚
                                          │───────────│
                                          β”‚ quantite  β”‚
                                          β”‚ prix_unit β”‚
                                          β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜
                                                β”‚
                                           0,n  β”‚  1,1
                                                β”‚
                                          β”Œβ”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”
                                          β”‚  PRODUIT  β”‚
                                          │───────────│
                                          β”‚ nom       β”‚
                                          β”‚ prix      β”‚
                                          β”‚ stock     β”‚
                                          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Cardinalites Merise

NotationSignificationExemple
0,1Zero ou unClient a 0 ou 1 adresse de livraison
1,1Exactement unCommande appartient a 1 et 1 seul client
0,nZero a plusieursClient peut avoir 0 a N commandes
1,nUn a plusieursCommande contient au moins 1 produit

UML - Diagramme de Classes

UML / PlantUML
@startuml
class Client {
  - id: UUID
  - nom: String
  - email: String
  - dateInscription: Date
  + passerCommande(): Commande
  + getHistorique(): List<Commande>
}

class Commande {
  - id: UUID
  - date: DateTime
  - statut: StatutCommande
  - total: Decimal
  + ajouterLigne(produit, qte): void
  + calculerTotal(): Decimal
}

class LigneCommande {
  - quantite: Integer
  - prixUnitaire: Decimal
}

class Produit {
  - id: UUID
  - nom: String
  - prix: Decimal
  - stock: Integer
}

Client "1" -- "*" Commande : passe
Commande "1" -- "*" LigneCommande : contient
LigneCommande "*" -- "1" Produit : reference
@enduml

Merise (MCD)

  • Methode francaise, tres structuree
  • Entites + Associations nommees
  • Cardinalites sur les pattes
  • Pas de methodes/comportements
  • Ideal pour les projets DB-centric

UML (Classes)

  • Standard international (OMG)
  • Classes avec attributs + methodes
  • Multiplicites sur les associations
  • Heritage, composition, aggregation
  • Ideal pour les projets objet/API

SNCF - Modelisation conceptuelle du systeme de reservation

La SNCF a utilise Merise pour concevoir son systeme de reservation (ancetre de oui.sncf) dans les annees 90. Le MCD initial comportait 120 entites et a survecu a 3 refondations technologiques.

  • Cle du succes : Un MCD partage entre les equipes metier et IT
  • Longevite : Le modele conceptuel de base est reste stable pendant 20+ ans
  • Lecon : Un bon modele conceptuel transcende les technologies

Sauter l'etape conceptuelle

Passer directement du besoin metier aux CREATE TABLE SQL. Sans modele conceptuel, les decisions de structure sont prises par les developpeurs individuellement, menant a des incoherences entre services.

Solution : Meme pour un projet agile, prenez 2h pour un MCD sur whiteboard avec les parties prenantes metier. Utilisez des outils comme draw.io, Lucidchart, ou dbdiagram.io pour le formaliser rapidement.

Quelle est la difference entre une association Merise et une relation UML ?
En Merise, une association est une entite a part entiere qui peut porter des attributs (ex: CONTIENT avec quantite et prix_unitaire). En UML, une association est un lien entre classes, et les attributs de la relation sont soit dans une classe d'association, soit dans la classe qui porte la multiplicite '*'. Merise force a nommer et penser chaque association, UML est plus flexible.

Modelisation Logique & Physique

55 min Intermediaire

Objectifs de cette lecon

  • Maitriser les formes normales de 1NF a BCNF
  • Savoir quand et comment denormaliser
  • Optimiser le modele physique avec indexation et partitionnement
  • Comprendre les trade-offs normalisation vs performance

La normalisation est l'art d'eliminer la redondance. La denormalisation est l'art de la reintroduire strategiquement pour la performance. Le vrai skill d'un Data Architect, c'est de savoir ou placer le curseur. En OLTP, normalisez. En OLAP, denormalisez. En microservices, chaque service a son propre compromis.

Les Formes Normales

FormeRegleElimine
1NFValeurs atomiques, pas de groupes repetitifsColonnes multi-valuees
2NF1NF + tout attribut non-cle depend de la cle ENTIEREDependances partielles
3NF2NF + pas de dependance transitiveDependances transitives
BCNFTout determinant est une cle candidateAnomalies restantes
SQL
-- Table NON normalisee (viole 1NF, 2NF, 3NF)
CREATE TABLE commandes_flat (
    commande_id INT,
    date_commande DATE,
    client_nom VARCHAR(100),
    client_email VARCHAR(100),     -- Dependance transitive
    client_ville VARCHAR(50),      -- Dependance transitive
    produit_nom VARCHAR(100),      -- Groupe repetitif
    produit_prix DECIMAL(10,2),    -- Dependance partielle
    quantite INT
);

-- Apres normalisation en 3NF
CREATE TABLE clients (
    client_id SERIAL PRIMARY KEY,
    nom VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE,
    ville_id INT REFERENCES villes(id)
);

CREATE TABLE commandes (
    commande_id SERIAL PRIMARY KEY,
    client_id INT REFERENCES clients(client_id),
    date_commande DATE NOT NULL DEFAULT CURRENT_DATE
);

CREATE TABLE lignes_commande (
    commande_id INT REFERENCES commandes(commande_id),
    produit_id INT REFERENCES produits(produit_id),
    quantite INT NOT NULL CHECK (quantite > 0),
    prix_unitaire DECIMAL(10,2) NOT NULL,
    PRIMARY KEY (commande_id, produit_id)
);

CREATE TABLE produits (
    produit_id SERIAL PRIMARY KEY,
    nom VARCHAR(100) NOT NULL,
    prix DECIMAL(10,2) NOT NULL
);

Strategies de Denormalisation

Quand Denormaliser

1. Les JOINs deviennent le bottleneck (3+ tables jointes frequemment).
2. Les donnees sont en lecture seule ou rarement modifiees.
3. La latence est critique (dashboards temps reel).
4. Vous etes en OLAP/DWH (Kimball encourage la denormalisation).

Optimisation Physique

SQL - PostgreSQL
-- Partitionnement par range (date)
CREATE TABLE events (
    id BIGSERIAL,
    event_date DATE NOT NULL,
    event_type VARCHAR(50),
    payload JSONB
) PARTITION BY RANGE (event_date);

CREATE TABLE events_2024_q1 PARTITION OF events
    FOR VALUES FROM ('2024-01-01') TO ('2024-04-01');
CREATE TABLE events_2024_q2 PARTITION OF events
    FOR VALUES FROM ('2024-04-01') TO ('2024-07-01');

-- Index strategiques
CREATE INDEX idx_events_type ON events (event_type);
CREATE INDEX idx_events_payload ON events USING GIN (payload);

-- Index partiel (seulement les actifs)
CREATE INDEX idx_active_users ON users (email)
    WHERE status = 'active';

Slack - Denormalisation strategique pour la performance

Slack stocke les messages dans un modele denormalise avec le nom du channel et de l'utilisateur directement dans la table messages, evitant des JOINs sur chaque affichage.

  • Trade-off : Redondance du nom utilisateur dans chaque message
  • Gain : Lecture d'un message = 1 requete au lieu de 3 JOINs
  • Gestion : Un worker asynchrone propage les changements de nom

Sur-normalisation en OLAP

Appliquer la 3NF a un Data Warehouse. Les analystes se retrouvent a joindre 15 tables pour une simple requete, les performances s'effondrent, et ils finissent par extraire les donnees dans Excel.

Solution : En OLAP, utilisez un schema en etoile (Kimball). Les dimensions denormalisees et les tables de faits permettent des requetes analytiques performantes sans JOINs complexes.

Quelle est la difference entre un index B-tree et un index GIN dans PostgreSQL ?
B-tree est l'index par defaut, ideal pour les comparaisons (=, <, >, BETWEEN) sur des colonnes scalaires. GIN (Generalized Inverted Index) est concu pour les types composites : JSONB, arrays, tsvector (full-text). GIN permet de chercher a l'interieur de structures : WHERE payload @> '{"status": "active"}'. GIN est plus lent en ecriture mais plus rapide en lecture pour ces cas.

Dimensional Modeling - Methode Kimball

55 min Avance

Objectifs de cette lecon

  • Maitriser le schema en etoile et le schema en flocon
  • Concevoir des tables de faits et de dimensions efficaces
  • Implementer les Slowly Changing Dimensions (SCD) types 1 a 6
  • Utiliser la Bus Matrix pour l'architecture dimensionnelle d'entreprise

Ralph Kimball a revolutionne le monde du Data Warehousing en proposant une approche bottom-up centree sur les processus metier. Son schema en etoile est elegant dans sa simplicite : une table de faits au centre, des dimensions autour. 30 ans plus tard, c'est toujours la base de la modelisation analytique - meme dans dbt et les lakehouses modernes.

Schema en Etoile

Star Schema - Analyse des Ventes
              dim_date                  dim_produit
          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
          β”‚ date_key (PK)β”‚          β”‚ prod_key (PK)β”‚
          β”‚ date_full    β”‚          β”‚ nom          β”‚
          β”‚ jour_semaine β”‚          β”‚ categorie    β”‚
          β”‚ mois         β”‚          β”‚ sous_cat     β”‚
          β”‚ trimestre    β”‚          β”‚ marque       β”‚
          β”‚ annee        β”‚          β”‚ fournisseur  β”‚
          β”‚ est_ferie    β”‚          β”‚ prix_liste   β”‚
          β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜          β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
                 β”‚                         β”‚
                 β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
                 └───>β”‚  fact_ventes  β”‚<β”€β”€β”€β”€β”˜
                      │──────────────│
                 β”Œβ”€β”€β”€>β”‚ date_key (FK)β”‚<────┐
                 β”‚    β”‚ prod_key (FK)β”‚     β”‚
                 β”‚    β”‚ client_key   β”‚     β”‚
                 β”‚    β”‚ magasin_key  β”‚     β”‚
          dim_client   │──────────────│   dim_magasin
          β”‚ quantite    β”‚
          β”‚ montant_ht  β”‚
          β”‚ montant_ttc β”‚
          β”‚ remise      β”‚
          β”‚ cout_revientβ”‚
          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Slowly Changing Dimensions (SCD)

TypeStrategieHistoriqueExemple
SCD 0Pas de changementNonDate de naissance
SCD 1Ecraser l'ancienne valeurNonCorrection d'erreur
SCD 2Nouvelle ligne avec datesOui (complet)Changement d'adresse
SCD 3Colonne previous_valuePartiel (N-1)Changement de categorie
SCD 4Table d'historique separeeOui (separe)Historique des prix
SCD 6Hybride 1+2+3Oui (complet+courant)Best of all worlds
SQL - SCD Type 2
-- Dimension Client avec SCD Type 2
CREATE TABLE dim_client (
    client_key SERIAL PRIMARY KEY,    -- Surrogate key
    client_id VARCHAR(20) NOT NULL,   -- Business key (natural)
    nom VARCHAR(100),
    adresse VARCHAR(200),
    ville VARCHAR(50),
    segment VARCHAR(20),
    date_debut DATE NOT NULL,
    date_fin DATE DEFAULT '9999-12-31',
    est_courant BOOLEAN DEFAULT TRUE
);

-- Mise a jour SCD2 : client demenage
-- 1. Fermer l'enregistrement courant
UPDATE dim_client
SET date_fin = CURRENT_DATE - 1, est_courant = FALSE
WHERE client_id = 'C001' AND est_courant = TRUE;

-- 2. Inserer le nouvel enregistrement
INSERT INTO dim_client (client_id, nom, adresse, ville, segment, date_debut)
VALUES ('C001', 'Marie Dupont', '45 Avenue Foch', 'Lyon', 'Premium', CURRENT_DATE);

Bus Matrix

L'Enterprise Bus Matrix de Kimball

La Bus Matrix est l'outil strategique pour planifier un DWH d'entreprise. En lignes : les processus metier (faits). En colonnes : les dimensions conformes partagees. Les "X" indiquent quelles dimensions sont utilisees par quels faits.

Processus / DimensionDateClientProduitMagasinEmploye
VentesXXXXX
InventaireXXX
RetoursXXXX
MarketingXX

Walmart - Le plus grand DWH Kimball au monde

Walmart a construit le plus grand Data Warehouse dimensionnel au monde avec l'approche Kimball, analysant 2.5+ Po de donnees de ventes de 11K+ magasins.

  • Architecture : Schema en etoile avec dimensions conformes partagees
  • Grain : Transaction individuelle (chaque scan de produit)
  • Impact : Reapprovisionnement automatique, pricing dynamique, detection de tendances

Le "One Big Table" (OBT) comme seule approche

Tout aplatir dans une seule table denormalisee geante. Simple en apparence, mais cauchemardesque a maintenir : 200+ colonnes, mises a jour en cascade, et aucune reutilisabilite des dimensions.

Solution : L'OBT peut etre un dernier kilometre pour la BI (couche mart), mais ne doit jamais remplacer le schema en etoile comme couche de modelisation. Gardez le star schema comme source, et generez des OBT pour des cas specifiques si necessaire.

Quelle est la difference entre une surrogate key et une natural key dans un DWH ?
La natural key (business key) est l'identifiant metier original (ex: numero client "C001"). La surrogate key est un entier auto-incremente genere par le DWH (ex: client_key = 42). On utilise des surrogate keys dans les DWH pour : (1) gerer les SCD (un client peut avoir plusieurs lignes), (2) performance des JOINs (entier vs varchar), (3) independance vis-a-vis des systemes source.

Data Vault 2.0

55 min Avance

Objectifs de cette lecon

  • Comprendre les 3 types de tables Data Vault : Hubs, Links, Satellites
  • Maitriser le hashage des business keys et les patterns d'alimentation
  • Savoir quand choisir Data Vault vs Kimball
  • Implementer des PIT tables et Bridge tables

Data Vault 2.0 est ne de la frustration avec Kimball dans les environnements agiles. Dan Linstedt a concu une modelisation qui separe la structure (hubs/links) du contexte (satellites), permettant des chargements paralleles et incrementaux. C'est plus complexe mais incroyablement resilient au changement - ideal pour les entreprises qui integrent des dizaines de sources.

Les 3 Types de Tables

Data Vault - Relation Client-Commande
  Hub_Client              Link_Client_Commande         Hub_Commande
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚ hub_client_hk │──────>β”‚ lnk_cli_cmd_hk     β”‚<──────│ hub_commande_hkβ”‚
  β”‚ client_bk     β”‚       β”‚ hub_client_hk (FK)  β”‚       β”‚ commande_bk    β”‚
  β”‚ load_date     β”‚       β”‚ hub_commande_hk (FK)β”‚       β”‚ load_date      β”‚
  β”‚ record_source β”‚       β”‚ load_date           β”‚       β”‚ record_source  β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜       β”‚ record_source       β”‚       β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
          β”‚               β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                β”‚
          β”‚                                                     β”‚
          v                                                     v
  Sat_Client_Details                                   Sat_Commande_Details
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚ hub_client_hk β”‚                                   β”‚ hub_commande_hk  β”‚
  β”‚ load_date     β”‚                                   β”‚ load_date        β”‚
  β”‚ nom           β”‚                                   β”‚ date_commande    β”‚
  β”‚ email         β”‚                                   β”‚ statut           β”‚
  β”‚ adresse       β”‚                                   β”‚ montant_total    β”‚
  β”‚ hash_diff     β”‚                                   β”‚ hash_diff        β”‚
  β”‚ record_source β”‚                                   β”‚ record_source    β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Les Principes Data Vault

Hub : Entite metier identifiee par sa business key. Un hub ne change jamais une fois cree.
Link : Relation entre hubs. Capture les associations (N:M par nature).
Satellite : Contexte/attributs d'un hub ou link. Versionne automatiquement (insert-only).
Hash Key : MD5/SHA-256 de la business key pour des JOINs performants et deterministes.

SQL - Data Vault
-- Hub Client
CREATE TABLE hub_client (
    hub_client_hk CHAR(32) PRIMARY KEY,  -- MD5(client_bk)
    client_bk VARCHAR(50) NOT NULL,       -- Business key
    load_date TIMESTAMP NOT NULL,
    record_source VARCHAR(50) NOT NULL
);

-- Satellite Client (insert-only, historise automatiquement)
CREATE TABLE sat_client_details (
    hub_client_hk CHAR(32) REFERENCES hub_client(hub_client_hk),
    load_date TIMESTAMP NOT NULL,
    load_end_date TIMESTAMP DEFAULT '9999-12-31',
    hash_diff CHAR(32) NOT NULL,  -- MD5(nom||email||adresse)
    nom VARCHAR(100),
    email VARCHAR(100),
    adresse VARCHAR(200),
    record_source VARCHAR(50),
    PRIMARY KEY (hub_client_hk, load_date)
);

-- Chargement : inserer seulement si hash_diff a change
INSERT INTO sat_client_details
SELECT src.hub_client_hk, CURRENT_TIMESTAMP, '9999-12-31',
       MD5(src.nom || src.email || src.adresse),
       src.nom, src.email, src.adresse, 'CRM'
FROM staging_clients src
LEFT JOIN sat_client_details sat
  ON src.hub_client_hk = sat.hub_client_hk
  AND sat.load_end_date = '9999-12-31'
WHERE sat.hub_client_hk IS NULL
   OR MD5(src.nom||src.email||src.adresse) != sat.hash_diff;

ING Bank - Data Vault pour la conformite reglementaire

ING a adopte Data Vault pour son DWH regulatoire, permettant de tracer l'origine de chaque donnee (audit trail complet requis par la BCE).

  • Scale : 500+ hubs, 800+ satellites, 300+ links
  • Avantage : Tracabilite complete avec record_source et load_date sur chaque ligne
  • Agilite : Ajout d'une nouvelle source en 2 jours au lieu de 2 semaines avec Kimball

Data Vault pour un petit projet

Implementer Data Vault pour un DWH de 10 tables avec 2 sources. La complexite des hubs/links/satellites triplera le nombre de tables sans benefice reel.

Solution : Data Vault est justifie quand vous avez 5+ sources heterogenes, des besoins d'auditabilite forts, ou une equipe data de 5+ personnes chargeant en parallele. Pour un petit projet, un schema en etoile Kimball classique sera bien plus simple et tout aussi efficace.

Comparaison des Approches de Modelisation

40 min Avance

Objectifs de cette lecon

  • Comparer objectivement Kimball, Data Vault, 3NF et OBT
  • Savoir choisir l'approche selon le contexte projet
  • Comprendre les approches hybrides et le role de dbt

Il n'y a pas de "meilleure" approche de modelisation. Il y a l'approche la plus adaptee a VOTRE contexte. Taille de l'equipe, nombre de sources, besoins d'audit, frequence de changement - ce sont les vrais criteres de decision. Et souvent, la meilleure architecture est hybride : Data Vault en raw, Kimball en marts.

Matrice de Comparaison

Critere3NF (Inmon)Kimball (Star)Data VaultOBT
ComplexiteMoyenneFaibleEleveeTres faible
Nombre de tablesEleveMoyenTres eleve (3x)1
AgiliteFaibleMoyenneEleveeElevee
Performance lectureFaible (JOINs)BonneFaible (sans marts)Excellente
AuditabiliteMoyenneFaibleExcellenteNulle
Multi-sourcesDifficileMoyenExcellentDifficile
Scalabilite equipeMoyenneBonneExcellenteFaible
Courbe apprentissageMoyenneFaibleEleveeNulle

Arbre de Decision

Choisir son Approche de Modelisation
  Combien de sources de donnees ?
  β”‚
  β”œβ”€β”€ 1-3 sources ──> Equipe data ?
  β”‚                   β”œβ”€β”€ 1-3 personnes ──> Kimball Star Schema
  β”‚                   └── 4+ personnes  ──> Kimball + dbt
  β”‚
  └── 4+ sources ───> Besoins d'audit ?
                      β”œβ”€β”€ Oui (reglementaire) ──> Data Vault + Kimball marts
                      └── Non ──────────────────> Kimball + staging layer

  Note: OBT est un pattern de SORTIE (mart),
  jamais une couche de modelisation primaire

Choix d'architecture pour 3 entreprises

Pour chaque scenario, recommandez l'approche de modelisation :

  • Startup SaaS (5 devs, 1 DB, analytics basiques) : Schema en etoile Kimball avec dbt. Simple, efficace, comprehensible par toute l'equipe.
  • Banque (50 sources, audit BCE, equipe de 20) : Data Vault 2.0 en raw vault + Kimball business vault (marts). Auditabilite complete, chargement parallele par equipe.
  • E-commerce (10 sources, equipe de 8, croissance rapide) : Approche hybride : staging en 3NF, transformation dbt en Kimball. Bon equilibre agilite/structure.

GitLab - Approche hybride avec dbt

GitLab utilise une approche en couches avec dbt : sources brutes β†’ staging (3NF) β†’ intermediate β†’ marts (Kimball star). Leur projet dbt open-source montre cette architecture en action.

  • 800+ modeles dbt organises en couches
  • Sources : Salesforce, Zuora, GitLab.com, Snowplow
  • Marts : Finance, Product, Marketing - chacun en star schema

Lab : Modelisation Complete E-commerce

60 min Pratique

Objectifs de ce lab

  • Modeliser un systeme e-commerce du conceptuel au physique
  • Creer un schema en etoile pour l'analyse des ventes
  • Implementer les SCD Type 2 pour les dimensions

Lab: Modelisation E-commerce End-to-End

Etape 1 : Modele Conceptuel

A partir du brief suivant, identifiez les entites et associations :

"ShopExpress vend des produits organises en categories. Les clients passent des commandes contenant un ou plusieurs produits. Chaque client a une adresse de livraison et peut avoir des coupons de reduction. Les commandes sont livrees par des transporteurs."

Entites : Client, Commande, Produit, Categorie, Coupon, Transporteur, Adresse

Associations : PASSE (Client-Commande), CONTIENT (Commande-Produit), APPARTIENT (Produit-Categorie), UTILISE (Commande-Coupon), LIVRE (Transporteur-Commande)

Etape 2 : Schema en Etoile (DWH)

Transformez le MCD en star schema pour analyser les ventes :

SQL
-- Table de faits : grain = ligne de commande
CREATE TABLE fact_ventes (
    vente_key BIGSERIAL PRIMARY KEY,
    date_key INT REFERENCES dim_date(date_key),
    client_key INT REFERENCES dim_client(client_key),
    produit_key INT REFERENCES dim_produit(produit_key),
    magasin_key INT REFERENCES dim_magasin(magasin_key),
    -- Mesures
    quantite INT NOT NULL,
    prix_unitaire DECIMAL(10,2),
    montant_ht DECIMAL(10,2),
    remise DECIMAL(10,2) DEFAULT 0,
    montant_ttc DECIMAL(10,2),
    cout_transport DECIMAL(10,2)
);

Etape 3 : SCD Type 2 pour dim_client

Implementez une dimension client avec historisation :

SQL - dbt snapshot
-- dbt snapshot pour SCD Type 2 automatique
{% snapshot dim_client_snapshot %}
{{
    config(
      target_schema='snapshots',
      unique_key='client_id',
      strategy='check',
      check_cols=['nom', 'email', 'adresse', 'ville', 'segment'],
    )
}}
SELECT
    client_id,
    nom,
    email,
    adresse,
    ville,
    segment,
    date_inscription
FROM {{ source('crm', 'clients') }}
{% endsnapshot %}

Etape 4 : Requetes Analytiques

SQL
-- Top 10 produits par CA avec tendance
SELECT
    p.nom AS produit,
    p.categorie,
    SUM(f.montant_ttc) AS ca_total,
    SUM(f.quantite) AS volume,
    COUNT(DISTINCT f.client_key) AS nb_clients,
    SUM(CASE WHEN d.mois = EXTRACT(MONTH FROM CURRENT_DATE)
        THEN f.montant_ttc END) AS ca_mois_courant,
    SUM(CASE WHEN d.mois = EXTRACT(MONTH FROM CURRENT_DATE) - 1
        THEN f.montant_ttc END) AS ca_mois_precedent
FROM fact_ventes f
JOIN dim_produit p ON f.produit_key = p.produit_key
JOIN dim_date d ON f.date_key = d.date_key
WHERE d.annee = 2024
GROUP BY p.nom, p.categorie
ORDER BY ca_total DESC
LIMIT 10;

Quiz - Data Modeling

25 min Evaluation

Objectifs de cette evaluation

  • Valider vos connaissances sur les approches de modelisation
  • Verifier votre capacite a choisir la bonne approche
  • Tester la maitrise des concepts cles (SCD, Bus Matrix, Data Vault)

Quiz Module 2.1 - Data Modeling

1. Quel est l'objectif principal de la troisieme forme normale (3NF) ?

A) Ameliorer la performance des requetes
B) Eliminer les dependances transitives
C) Ajouter des index sur chaque colonne
D) Reduire le nombre de tables
Correct : B) La 3NF elimine les dependances transitives : si A→B et B→C, alors C ne doit pas etre dans la meme table que A. Cela reduit la redondance et les anomalies de mise a jour.

2. Dans un schema Kimball, qu'est-ce qu'une "dimension conforme" ?

A) Une dimension qui respecte la 3NF
B) Une dimension partagee entre plusieurs tables de faits
C) Une dimension avec SCD Type 2
D) Une dimension sans surrogate key
Correct : B) Une dimension conforme est une dimension partagee et identique entre plusieurs faits (ex: dim_date utilisee par fact_ventes ET fact_inventaire). C'est la cle de la Bus Matrix et de la coherence du DWH.

3. Quel type de SCD cree une nouvelle ligne avec des dates de validite ?

A) SCD Type 1
B) SCD Type 2
C) SCD Type 3
D) SCD Type 0
Correct : B) SCD Type 2 conserve l'historique complet en creant une nouvelle ligne a chaque changement, avec date_debut, date_fin et un flag est_courant. C'est le type le plus utilise pour les dimensions qui changent.

4. En Data Vault, quel est le role d'un Hub ?

A) Stocker les attributs descriptifs d'une entite
B) Capturer les relations entre entites
C) Identifier de maniere unique une entite metier via sa business key
D) Stocker les metriques et mesures
Correct : C) Un Hub contient uniquement la business key hashee, la business key originale, la date de chargement et la source. Les attributs sont dans les Satellites, les relations dans les Links.

5. Quelle approche de modelisation est la plus adaptee pour une banque soumise a des audits reglementaires stricts ?

A) OBT (One Big Table)
B) Schema en etoile Kimball
C) Data Vault 2.0
D) Schema en flocon
Correct : C) Data Vault 2.0 offre une tracabilite complete avec record_source et load_date sur chaque ligne, un historique insert-only (rien n'est ecrase), et un hash_diff pour detecter les changements. Ideal pour les exigences d'audit et de conformite.

6. Dans un modele Kimball, qu'est-ce que le "grain" d'une table de faits ?

A) Le nombre de colonnes de la table
B) Le niveau de detail le plus fin que represente chaque ligne
C) La taille physique de la table sur disque
D) Le nombre de dimensions reliees
Correct : B) Le grain definit ce que represente UNE ligne de la table de faits. Ex: "une ligne de commande", "un scan de produit", "un clic". Le grain doit etre declare explicitement et ne jamais etre melange dans une meme table de faits.

7. Pourquoi utilise-t-on des hash keys (MD5/SHA) en Data Vault ?

A) Pour la securite des donnees
B) Pour des JOINs performants et un chargement deterministe
C) Pour compresser les donnees
D) Pour le chiffrement reglementaire
Correct : B) Les hash keys permettent : (1) des JOINs sur des colonnes de taille fixe (32 chars MD5), (2) un chargement deterministe (meme input = meme hash, pas besoin de sequence), (3) un chargement parallele (pas de dependance sur des sequences auto-incrementees).

8. Quel est l'inconvenient majeur du pattern "One Big Table" (OBT) ?

A) Performance de lecture trop lente
B) Impossible a implementer dans un DWH cloud
C) Difficulte de maintenance et risque d'incoherences lors des mises a jour
D) Incompatible avec SQL
Correct : C) L'OBT concentre toutes les donnees dans une table, ce qui rend les mises a jour complexes (modifier un attribut client = modifier potentiellement des millions de lignes). La redondance massive augmente le risque d'incoherences et rend le debugging difficile.

Lecon 9 : DAMA-DMBOK 2.0 - Le Referentiel de la Data

60 min Intermediaire Module 2.2

Objectifs d'apprentissage

  • Comprendre les 14 Knowledge Areas du DAMA-DMBOK 2.0
  • Maitriser la Data Governance Wheel et ses interconnexions
  • Evaluer la maturite data d'une organisation avec le DMBOK Maturity Framework
  • Appliquer le DMBOK comme roadmap de transformation data
  • Identifier les roles et responsabilites definis par DAMA

Qu'est-ce que DAMA International ?

DAMA International (Data Management Association) est l'organisation mondiale de reference pour les professionnels de la gestion des donnees. Fondee en 1988, elle regroupe plus de 20 000 membres dans 40 pays. Son oeuvre majeure, le DMBOK (Data Management Body of Knowledge), est a la data ce que le PMBOK est au project management.

La version 2.0, publiee en 2017, represente une refonte majeure par rapport a la version 1.0 (2009). Elle integre les evolutions du Big Data, du Cloud, de la Data Science et de la gouvernance moderne. C'est le referentiel le plus utilise au monde pour structurer une strategie de gestion des donnees.

Concept Cle : Pourquoi le DMBOK est indispensable

Le DMBOK fournit un langage commun pour parler de data management. Sans ce referentiel, chaque organisation reinvente la roue : les equipes data engineering parlent de pipelines, les equipes BI parlent de rapports, la securite parle de compliance... Le DMBOK unifie ces perspectives sous un cadre structure de 14 domaines interconnectes.

Les 14 Knowledge Areas du DMBOK 2.0

Le DMBOK organise le data management en 14 domaines de connaissance (Knowledge Areas). Au centre se trouve la Data Governance, qui orchestre et supervise les 13 autres domaines. Chaque Knowledge Area couvre les activites, roles, pratiques et metriques associees.

DAMA-DMBOK 2.0 - Data Management Wheel (Les 14 Knowledge Areas)
                          ╔══════════════════════════╗
                          β•‘    DATA MANAGEMENT       β•‘
                          β•‘      FRAMEWORK           β•‘
                          β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

                        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                        β”‚   DATA GOVERNANCE    β”‚
                        β”‚      (Centre)        β”‚
                        β”‚  Planning, Control,  β”‚
                        β”‚  Oversight of all    β”‚
                        β”‚  data activities     β”‚
                        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                 β”‚
          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
          β”‚                      β”‚                      β”‚
    β”Œβ”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”          β”Œβ”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”          β”Œβ”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”
    β”‚ LIFECYCLE β”‚          β”‚ SUPPORT   β”‚          β”‚ PURPOSE   β”‚
    β”‚ DOMAINS   β”‚          β”‚ DOMAINS   β”‚          β”‚ DOMAINS   β”‚
    β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜          β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜          β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜
          β”‚                      β”‚                      β”‚
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”       β”Œβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”
  β”‚       β”‚       β”‚      β”‚      β”‚      β”‚       β”‚       β”‚       β”‚
  β–Ό       β–Ό       β–Ό      β–Ό      β–Ό      β–Ό       β–Ό       β–Ό       β–Ό

β”Œβ”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”
β”‚Data  β”‚β”‚Data  β”‚β”‚Ref & β”‚β”‚Data  β”‚β”‚Meta- β”‚β”‚Data  β”‚β”‚DW &  β”‚β”‚Big   β”‚
β”‚Archi-β”‚β”‚Model β”‚β”‚Masterβ”‚β”‚Stor- β”‚β”‚data  β”‚β”‚Qual- β”‚β”‚BI    β”‚β”‚Data &β”‚
β”‚tec-  β”‚β”‚& De- β”‚β”‚Data  β”‚β”‚age & β”‚β”‚Mgmt  β”‚β”‚ity   β”‚β”‚      β”‚β”‚Data  β”‚
β”‚ture  β”‚β”‚sign  β”‚β”‚Mgmt  β”‚β”‚Ops   β”‚β”‚      β”‚β”‚      β”‚β”‚      β”‚β”‚Sci.  β”‚
β””β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”˜

β”Œβ”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”
β”‚Data  β”‚β”‚Data  β”‚β”‚Docu- β”‚β”‚Data  β”‚β”‚Data  β”‚
β”‚Secu- β”‚β”‚Inte- β”‚β”‚ment &β”‚β”‚Ethicsβ”‚β”‚Mail &β”‚
β”‚rity  β”‚β”‚gra-  β”‚β”‚Con-  β”‚β”‚      β”‚β”‚Socialβ”‚
β”‚      β”‚β”‚tion  β”‚β”‚tent  β”‚β”‚      β”‚β”‚Media β”‚
β””β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”˜

1. Data Governance (Centre de la roue)

Planification, supervision et controle de la gestion des donnees. C'est le domaine central qui orchestre tous les autres. Il definit les politiques, standards, roles (Data Stewards, Data Owners) et metriques. La Data Governance n'est pas un projet mais un programme continu.

2. Data Architecture

Definition des blueprints, standards et modeles qui guident l'integration, le controle et la gestion des donnees. C'est la vision d'ensemble de comment les donnees circulent dans l'organisation. Inclut l'Enterprise Data Model, les flux de donnees et les principes architecturaux.

3. Data Modeling & Design

Processus de decouverte, analyse et representation des structures de donnees. Couvre les modeles conceptuels (MCD), logiques (MLD) et physiques (MPD). C'est le domaine que nous avons etudie en profondeur dans le Module 2.1.

4. Data Storage & Operations

Conception, implementation et support du stockage des donnees. Couvre les bases de donnees relationnelles, NoSQL, les systemes de fichiers, le backup/recovery et le monitoring des performances.

5. Data Security

Planification, developpement et execution des politiques de securite pour assurer l'authentification, l'autorisation, l'acces et l'audit des donnees. Inclut le chiffrement, le masking et la classification des donnees.

6. Data Integration & Interoperability

Processus lies au mouvement et a la consolidation des donnees entre systemes. Couvre ETL/ELT, API, streaming, virtualisation des donnees et MDM. C'est le ciment qui relie les systemes.

7. Document & Content Management

Gestion des donnees non structurees : documents, images, videos, emails. Souvent oublie dans les strategies data, ce domaine represente pourtant 80% des donnees d'entreprise.

8. Reference & Master Data Management

Gestion des donnees de reference (codes pays, devises) et des donnees maitres (clients, produits, fournisseurs). Le MDM est critique pour eviter les doublons et assurer la coherence cross-systemes.

9. Data Warehousing & Business Intelligence

Planification, implementation et controle des processus pour fournir des donnees analytiques. Couvre les DWH, data marts, OLAP, reporting et visualisation.

10. Metadata Management

Gestion des metadonnees techniques, business et operationnelles. Les metadonnees sont "les donnees sur les donnees" - sans elles, les donnees perdent leur contexte et deviennent inutilisables.

11. Data Quality

Planification et implementation des techniques de qualite pour mesurer, evaluer et ameliorer la qualite des donnees. Les 6 dimensions : exactitude, completude, coherence, actualite, unicite, validite.

12. Big Data & Data Science

Ajout majeur du DMBOK 2.0. Couvre les technologies Big Data (Hadoop, Spark), le machine learning, l'IA et l'analytics avancee. Reconnait que ces disciplines ont besoin de gouvernance.

13. Data Ethics

Nouveau dans la v2.0. Principes ethiques de collecte, stockage et utilisation des donnees. Couvre le consentement, la transparence, l'equite algorithmique et la privacy by design.

14. Data Management Maturity Assessment

Framework d'evaluation de la maturite de chaque Knowledge Area. Permet de mesurer ou en est l'organisation et de prioriser les investissements.

Interconnexion des domaines

Les 14 Knowledge Areas ne sont pas des silos. Par exemple, la Data Quality depand de bons Data Models, qui necessitent des Metadata bien gerees, elles-memes supervisees par la Data Governance. Un bon Data Architect doit comprendre comment ces domaines interagissent et se renforcent mutuellement.

La Structure de chaque Knowledge Area

Chaque Knowledge Area du DMBOK suit une structure standardisee en 7 sections, ce qui facilite la comparaison et l'implementation :

SectionDescriptionExemple (Data Quality)
DefinitionCe qu'est le domainePlanification et controle des techniques de qualite
ActivitiesCe qu'on fait dans ce domaineProfiling, cleansing, monitoring, rules definition
DeliverablesCe qu'on produitDQ scorecards, SLA reports, exception reports
Roles & ResponsibilitiesQui fait quoiDQ Analyst, Data Steward, DQ Manager
Practices & TechniquesComment on le faitStatistical profiling, pattern matching, fuzzy matching
ToolsAvec quoi on le faitInformatica DQ, Talend DQ, Great Expectations
Organization & CultureLe contexte organisationnelCulture data-driven, ownership, accountability

Astuce d'implementation

Ne tentez jamais d'implementer les 14 Knowledge Areas simultanement. Commencez par la Data Governance (fondation), puis ajoutez Data Quality et Metadata Management (quick wins visibles). Les autres domaines viendront naturellement en fonction des priorites business.

DMBOK Maturity Assessment Framework - Les 5 Niveaux

Le DMBOK propose un modele de maturite inspire du CMMI (Capability Maturity Model Integration). Il permet d'evaluer chaque Knowledge Area sur une echelle de 1 a 5 et de construire une roadmap de progression.

DMBOK Maturity Model - 5 Niveaux de Maturite
  Niveau 5 β”‚ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ  OPTIMISE
  Optimise  β”‚ Amelioration continue, innovation, predictif
            β”‚ Metriques avancees, automatisation totale
            β”‚ Benchmark industrie, best-in-class
            β”‚
  Niveau 4 β”‚ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ       QUANTITATIVEMENT GERE
  Mesure    β”‚ Metriques definies et suivies
            β”‚ SLAs en place, processus mesures
            β”‚ Decisions basees sur les donnees
            β”‚
  Niveau 3 β”‚ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ             DEFINI
  Defini    β”‚ Processus standardises et documentes
            β”‚ Roles et responsabilites clairs
            β”‚ Formation et outils en place
            β”‚
  Niveau 2 β”‚ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ                   REPRODUCTIBLE
  Repeatableβ”‚ Processus de base en place
            β”‚ Quelques standards etablis
            β”‚ Dependance aux individus cles
            β”‚
  Niveau 1 β”‚ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ                         INITIAL
  Initial   β”‚ Ad hoc, reactif, non documente
            β”‚ Pas de processus formel
            β”‚ Heroics individuels
            └─────────────────────────────────────────────────────

  Cible typique pour la plupart des organisations : Niveau 3
  Leaders du marche (GAFAM, grandes banques) : Niveau 4-5

Exemple d'evaluation pour "Data Quality"

CritereNiveau 1Niveau 3Niveau 5
ProcessusNettoyage ad hoc quand un probleme survientRegles DQ definies, profiling automatiseDQ predictive, auto-remediation par ML
OutilsExcel, scripts manuelsOutils DQ dedies (Informatica, GX)Plateforme DQ integree, observability
RolesPersonne n'est responsableData Stewards nommes, DQ analystsCentre d'excellence DQ, DQ engineers
MetriquesAucune metrique formelleDQ scorecards par domaineSLAs automatises, impact business mesure
Culture"C'est le probleme de l'IT"Responsabilite partageeData quality = priorite strategique

Exercice : Evaluez votre organisation

Prenez les 5 Knowledge Areas les plus critiques pour votre organisation et evaluez-les sur l'echelle 1-5 :

  1. Data Governance : Avez-vous un programme formel ? Des Data Owners nommes ?
  2. Data Quality : Mesurez-vous la qualite ? Avez-vous des SLAs ?
  3. Metadata Management : Avez-vous un data catalog ? Les metadonnees sont-elles a jour ?
  4. Data Security : Classification des donnees en place ? Audit trail ?
  5. Data Architecture : Enterprise Data Model existant ? Standards documentes ?

La moyenne de ces scores vous donne une bonne approximation de votre maturite data globale. L'objectif n'est pas d'atteindre le niveau 5 partout, mais d'etre au niveau 3 minimum sur les domaines critiques.

Implementer le DMBOK dans votre organisation

Le DMBOK n'est pas un manuel d'implementation - c'est un referentiel. Il vous dit quoi faire, pas comment le faire dans votre contexte specifique. Voici une approche pragmatique en 4 phases :

Roadmap d'Implementation DMBOK - 4 Phases
  Phase 1 (Mois 1-3)        Phase 2 (Mois 4-9)        Phase 3 (Mois 10-18)      Phase 4 (Mois 18+)
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚   ASSESSMENT    β”‚        β”‚   FONDATIONS    β”‚        β”‚   EXPANSION     β”‚        β”‚   OPTIMISATION  β”‚
  β”‚                 β”‚  ───>  β”‚                 β”‚  ───>  β”‚                 β”‚  ───>  β”‚                 β”‚
  β”‚ - Maturity eval β”‚        β”‚ - Governance    β”‚        β”‚ - MDM program   β”‚        β”‚ - Metriques     β”‚
  β”‚ - Gap analysis  β”‚        β”‚   framework     β”‚        β”‚ - Data catalog  β”‚        β”‚   avancees      β”‚
  β”‚ - Quick wins    β”‚        β”‚ - Data Quality  β”‚        β”‚ - DWH/BI        β”‚        β”‚ - Automation    β”‚
  β”‚ - Business case β”‚        β”‚   baselines     β”‚        β”‚ - Data Security β”‚        β”‚ - Innovation    β”‚
  β”‚ - Stakeholder   β”‚        β”‚ - Metadata      β”‚        β”‚ - Integration   β”‚        β”‚ - Continuous    β”‚
  β”‚   mapping       β”‚        β”‚   basics        β”‚        β”‚ - Ethics        β”‚        β”‚   improvement   β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
YAML
# Exemple de Data Management Scorecard
data_management_scorecard:
  organization: "Acme Corp"
  assessment_date: "2024-06-15"
  assessor: "Chief Data Officer"

  knowledge_areas:
    data_governance:
      current_level: 2
      target_level: 4
      priority: "CRITICAL"
      gaps:
        - "Pas de Data Council formel"
        - "Politiques non documentees"
        - "Metriques absentes"
      actions:
        - "Creer Data Governance Council (Q3)"
        - "Nommer Data Owners pour 5 domaines cles (Q3)"
        - "Definir 3 politiques prioritaires (Q4)"

    data_quality:
      current_level: 1
      target_level: 3
      priority: "HIGH"
      gaps:
        - "Aucun profiling systematique"
        - "Pas de DQ rules documentees"
      actions:
        - "Deployer Great Expectations sur 3 pipelines (Q3)"
        - "Definir DQ SLAs pour donnees financieres (Q4)"

    metadata_management:
      current_level: 1
      target_level: 3
      priority: "HIGH"
      gaps:
        - "Pas de data catalog"
        - "Lineage inconnu"
      actions:
        - "POC DataHub ou Atlan (Q3)"
        - "Documenter les 50 tables les plus utilisees (Q4)"

    data_architecture:
      current_level: 2
      target_level: 3
      priority: "MEDIUM"

    data_security:
      current_level: 2
      target_level: 4
      priority: "HIGH"

  overall_maturity: 1.6  # Moyenne des 14 KAs
  target_maturity: 3.2
  estimated_timeline: "24 months"
  estimated_budget: "2.5M EUR"

Comment JPMorgan a implemente DMBOK apres une amende de $920M

En 2020, JPMorgan Chase a ete condamnee a une amende de $920 millions par la CFTC, la SEC et le DOJ pour manipulation des marches des metaux precieux et des Treasuries ("spoofing"). L'enquete a revele que les systemes de surveillance des donnees de trading etaient fragmentes et insuffisants.

Le declencheur : L'amende a mis en evidence un manque fondamental de gouvernance des donnees de trading. Les donnees de surveillance etaient reparties sur plus de 70 systemes non connectes, sans lineage clair ni data quality checks. Les regulateurs ne pouvaient pas obtenir une vue consolidee des activites de trading.

La reponse : Programme DMBOK-aligned de $500M+

  • Phase 1 - Governance (Mois 1-6) : Creation d'un Chief Data Office avec 200+ personnes. Nomination de Data Owners pour chaque ligne de business. Mise en place d'un Enterprise Data Council se reunissant mensuellement.
  • Phase 2 - Data Quality & Lineage (Mois 6-18) : Implementation d'un programme de data quality couvrant 100% des donnees regulatoires. Deploiement d'outils de lineage pour tracer chaque donnee de la source au rapport regulatoire.
  • Phase 3 - MDM & Integration (Mois 12-30) : Programme MDM pour les entites contreparties et instruments financiers. Golden record pour chaque client/contrepartie a travers toutes les lignes de business.
  • Phase 4 - Automatisation (Mois 24-48) : Automatisation des controles de conformite. Surveillance en temps reel des patterns de trading suspects.

Resultats (2023)

  • Reduction de 85% des incidents de data quality sur les donnees regulatoires
  • Temps de reponse aux requetes regulateurs : de 6 semaines a 48 heures
  • Plus de 500 Data Stewards actifs a travers l'organisation
  • Maturite DMBOK passee de 1.8 a 3.6 en moyenne sur les 14 KAs

Lecon cle : Il a fallu une amende de pres d'un milliard de dollars pour que le management prenne la data governance au serieux. Le DMBOK a fourni le cadre structure pour transformer la reaction en programme strategique. Le cout du programme ($500M+) etait inferieur au cout de la non-conformite.

DMBOK 2.0 vs Autres Referentiels

DAMA-DMBOK 2.0

  • 14 Knowledge Areas exhaustives
  • Referentiel le plus complet
  • Vendor-neutral
  • Focus sur le "quoi" et le "pourquoi"
  • Certification CDMP disponible
  • Communaute mondiale

Alternatives

  • EDM Council DCAM : Focus services financiers, plus prescriptif
  • CMMI Data Management : Focus maturite, modele de capability
  • ISO 8000 : Focus data quality, standard international
  • TOGAF (Data Architecture) : Focus architecture enterprise
  • COBIT : Focus IT governance, moins data-specifique

En tant que Data Architect, vous n'avez pas besoin de memoriser les 600+ pages du DMBOK. Mais vous devez connaitre les 14 Knowledge Areas, comprendre leurs interdependances, et savoir ou chercher quand vous faites face a un defi specifique. Pensez au DMBOK comme une encyclopedie, pas un roman a lire de bout en bout. La certification CDMP (Certified Data Management Professional) est un excellent investissement pour structurer vos connaissances.

Lecon 10 : Governance en Pratique

60 min Intermediaire Module 2.2

Objectifs d'apprentissage

  • Structurer un programme de Data Governance de A a Z
  • Definir les roles : Data Owner, Data Steward, Data Custodian
  • Creer un Data Governance Council efficace
  • Rediger des politiques de donnees pragmatiques
  • Mesurer le succes d'un programme de gouvernance avec des KPIs concrets

Le Triangle de la Data Governance

La Data Governance repose sur trois piliers fondamentaux : les Personnes, les Processus et la Technologie. La plupart des echecs de governance viennent d'un desequilibre entre ces trois piliers - typiquement, trop de technologie et pas assez de travail sur les personnes et les processus.

Les 3 Piliers de la Data Governance
                         ╔═══════════════════╗
                         β•‘  DATA GOVERNANCE  β•‘
                         β•‘    = Confiance    β•‘
                         β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
                                  β”‚
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚             β”‚             β”‚
              β”Œβ”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”
              β”‚ PERSONNES β”‚β”‚ PROCESSUS β”‚β”‚TECHNOLOGIEβ”‚
              β”‚   (50%)   β”‚β”‚   (30%)   β”‚β”‚   (20%)   β”‚
              β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜
                    β”‚            β”‚             β”‚
              β”Œβ”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”
              β”‚Data Ownersβ”‚β”‚Politiques β”‚β”‚Data Catalogβ”‚
              β”‚Data       β”‚β”‚Standards  β”‚β”‚DQ Tools   β”‚
              β”‚ Stewards  β”‚β”‚Procedures β”‚β”‚MDM Platformβ”‚
              β”‚Council    β”‚β”‚Metriques  β”‚β”‚Lineage    β”‚
              β”‚Champions  β”‚β”‚Workflows  β”‚β”‚Security   β”‚
              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Erreur #1 des programmes de governance

Acheter un outil de gouvernance (Collibra, Alation, etc.) avant d'avoir defini les roles, les processus et les politiques. Un outil sans processus est un "shelfware" - un logiciel qui prend la poussiere. 70% des outils de data catalog achetes ne sont pas adoptes faute de strategie d'adoption.

Les Roles de la Data Governance

Une gouvernance efficace necessite des roles clairement definis avec des responsabilites explicites. Voici les roles cles :

RoleResponsabiliteProfil typiqueNombre
Executive SponsorPorte le programme au niveau C-suite. Alloue le budget. Resout les conflits escalesCDO, CIO, CFO1
Data Governance LeadPilote operationnel du programme. Coordonne les stewards, reporte au sponsorManager Data Governance1-2
Data OwnerResponsable business d'un domaine de donnees. Decide qui a acces, valide les definitionsVP ou Director metier5-15 (1 par domaine)
Data StewardGardien operationnel de la qualite. Definit les regles, resout les problemes DQExpert metier / analyste20-100
Data CustodianResponsable technique : stockage, securite, backup, acces. Implemente les decisionsDBA, Data EngineerVariable
Data ConsumerUtilise les donnees. Reporte les problemes. Respecte les politiquesAnalyste, Data ScientistToute l'organisation

Data Owner vs Data Steward : la difference cruciale

Le Data Owner est un role business, strategique et decisionnel. C'est un VP ou Director qui est redevable de la qualite de "ses" donnees. Il ne touche pas aux donnees au quotidien. Le Data Steward est un role operationnel : il gere les donnees au jour le jour, definit les regles de qualite, resout les anomalies. Analogie : le Data Owner est le proprietaire d'un immeuble, le Data Steward est le gestionnaire qui s'assure que tout fonctionne.

Le Data Governance Council

Le Data Governance Council (ou Comite de Gouvernance des Donnees) est l'organe de decision strategique du programme. Sa composition et son fonctionnement sont critiques :

Markdown
# DATA GOVERNANCE COUNCIL - Charter Template

## Mission
Superviser et diriger la strategie de gestion des donnees
pour maximiser la valeur business tout en minimisant les risques.

## Composition
- President : CDO (ou sponsor executive)
- Membres permanents :
  - Data Governance Lead (secretaire)
  - Data Owners des 5 domaines principaux
  - CISO (securite)
  - DPO (privacy / RGPD)
  - Head of Data Engineering
  - Representant Compliance
- Invites ponctuels selon les sujets

## Fonctionnement
- Frequence : Mensuelle (1h30 max)
- Quorum : 60% des membres permanents
- Decisions : Majorite simple, droit de veto du CDO

## Responsabilites
1. Valider les politiques de donnees
2. Arbitrer les conflits de propriete des donnees
3. Approuver les investissements data > 50K EUR
4. Reviser les KPIs de data quality trimestriellement
5. Prioriser les initiatives data governance
6. Escalader les risques data au Comex si necessaire

## Agenda type
1. Revue des KPIs (15 min)
2. Points d'escalade des Data Stewards (20 min)
3. Decisions en attente (30 min)
4. Nouveaux sujets / initiatives (20 min)
5. Actions et prochaines etapes (5 min)

Politiques de Donnees : les 5 politiques fondamentales

Les politiques de donnees sont les "lois" de votre organisation en matiere de data. Elles doivent etre concises, comprehensibles par un non-technicien, et surtout applicables. Voici les 5 politiques a implementer en priorite :

1. Politique de Classification des Donnees

Definit les niveaux de sensibilite (Public, Interne, Confidentiel, Restreint) et les controles associes a chaque niveau. C'est la fondation de la securite des donnees.

2. Politique de Qualite des Donnees

Definit les standards de qualite, les SLAs, les processus de remediation et les responsabilites. Inclut les seuils d'acceptabilite par domaine.

3. Politique d'Acces aux Donnees

Definit qui peut acceder a quoi, comment demander l'acces, le processus d'approbation et la revue periodique des droits.

4. Politique de Retention et Archivage

Definit combien de temps chaque type de donnee est conserve, quand et comment archiver, et les procedures de destruction. Critique pour le RGPD.

5. Politique d'Utilisation Acceptable

Definit ce qu'on peut et ne peut pas faire avec les donnees : usages autorises, restrictions, obligations de confidentialite.

Conseil : la regle des 2 pages

Une bonne politique de donnees tient sur 2 pages maximum. Si c'est plus long, personne ne la lira. Redigez des politiques courtes avec des principes clairs, et mettez les details dans des procedures separees. Format recommande : Objectif (3 lignes) > Scope (3 lignes) > Principes (5-7 bullets) > Roles (tableau) > Exceptions (comment les demander).

KPIs de la Data Governance

Ce qui ne se mesure pas ne s'ameliore pas. Voici les metriques essentielles pour piloter un programme de governance :

CategorieKPICibleFrequence
Data QualityDQ Score global (% de regles respectees)> 95%Hebdomadaire
Nombre d'incidents DQ critiques< 5/moisMensuelle
Temps moyen de resolution DQ< 48hMensuelle
Adoption% de domaines avec Data Owner nomme100%Trimestrielle
Utilisation du data catalog (MAU)> 60% des analystesMensuelle
Nombre de Data Stewards actifs1 pour 50 utilisateursTrimestrielle
Compliance% de donnees classifiees> 90%Trimestrielle
Demandes d'acces traitees dans les SLA> 95%Mensuelle
Business ValueReduction du temps de preparation des donnees-30%/anAnnuelle
Incidents business lies a la data-50%/anAnnuelle

Data Governance a Societe Generale : 3 ans de transformation

En 2019, Societe Generale a lance un programme ambitieux de Data Governance dans le cadre de sa strategie "Data-Driven Bank". Le contexte etait particulier : apres la crise des subprimes et les nouvelles exigences de BCBS 239 (principles for effective risk data aggregation), la banque devait transformer radicalement sa gestion des donnees.

Phase 1 : Fondations (2019)

  • Nomination d'un Group Chief Data Officer rapportant directement au Directeur General
  • Creation d'un reseau de 80 Data Officers dans les business units
  • Definition du "Data Governance Operating Model" avec RACI pour chaque processus
  • Lancement du data catalog enterprise avec Collibra

Phase 2 : Deploiement (2020-2021)

  • Identification et documentation de 2 000+ "Critical Data Elements" (CDEs) pour le reporting regulatoire
  • Mise en place de Data Quality dashboards pour les donnees BCBS 239
  • Formation de 500+ collaborateurs aux principes de data governance
  • Implementation de data lineage end-to-end sur les chaines de reporting

Phase 3 : Industrialisation (2022)

  • Automatisation des controles de qualite sur 85% des flux de donnees critiques
  • Self-service data access avec workflow d'approbation integre
  • Integration de la governance dans les pipelines CI/CD (governance-as-code)

Resultats mesurables

  • Temps de production des rapports regulatoires : -40%
  • Incidents de data quality sur donnees critiques : -65%
  • Satisfaction des regulateurs sur la qualite des soumissions : de "needs improvement" a "satisfactory"
  • ROI estime du programme : 3.2x en 3 ans

Facteur cle de succes : Le sponsorship du Directeur General. Quand le CEO dit que la data governance est une priorite strategique, les business units suivent. Sans ce sponsorship, le programme aurait ete percu comme "un truc de l'IT".

Governance sans Executive Sponsor

Le probleme : Un Data Governance Lead lance un programme bottom-up, avec l'espoir que les resultats parleront d'eux-memes. Il cree des politiques, identifie des stewards, deploie un catalog... mais sans sponsor C-level.

Ce qui se passe inevitablement :

  • Les Data Owners nommes ne viennent pas aux reunions ("j'ai des priorites business")
  • Le budget est coupe au premier trimestre difficile
  • Les equipes IT ne priorisent pas les demandes de gouvernance
  • Le catalog reste vide car personne n'est incentive a le remplir
  • Le programme meurt en 12-18 mois, creant du cynisme pour le prochain essai

La solution :

Ne lancez JAMAIS un programme de governance sans un sponsor C-level (idealement CDO ou CFO). Obtenez d'abord le sponsorship, puis lancez le programme. Si vous n'arrivez pas a obtenir un sponsor, attendez qu'un incident (amende, erreur couteuse, audit rate) cree l'urgence necessaire.

Scenario : Vous etes embauche comme premier Data Governance Lead - Plan 90 jours

Vous venez d'etre recrute comme premier Data Governance Lead dans une ETI de 3000 collaborateurs (industrie manufacturiere). L'entreprise n'a aucun programme de gouvernance formel. Le CDO (votre manager, en poste depuis 6 mois) vous donne carte blanche. Voici votre plan d'action :

Jours 1-30 : ECOUTER et COMPRENDRE

  • Semaine 1-2 : Rencontrer 15-20 stakeholders cles (CEO, CFO, CIO, directeurs de BU, head of BI, DBA senior). Poser les memes 5 questions a chacun : "Quels sont vos problemes de data ? Quelles decisions prenez-vous avec des donnees ? Qu'est-ce qui vous frustre ? Quelles donnees sont critiques pour vous ? Qu'avez-vous deja essaye ?"
  • Semaine 3 : Cartographier les systemes existants, les flux de donnees principaux, les equipes et les douleurs. Identifier les "data champions" informels qui existent deja.
  • Semaine 4 : Synthetiser les findings. Identifier les 3 "quick wins" a forte visibilite et faible effort. Preparer une presentation de 10 slides pour le CDO.

Jours 30-60 : STRUCTURER et QUICK WINS

  • Semaine 5-6 : Definir le Data Governance Operating Model : organigramme, roles (commencer avec 5 Data Owners et 10 Stewards volontaires), charte du Data Council.
  • Semaine 7-8 : Executer le premier quick win (exemple : nettoyer les doublons clients qui generent des erreurs de facturation - probleme visible et mesurable). Communiquer le resultat largement.

Jours 60-90 : LANCER et MESURER

  • Semaine 9-10 : Premier Data Governance Council. Agenda : presentation du programme, validation de la charte, priorisation des 3 premiers domaines de donnees a gouverner.
  • Semaine 11-12 : Definir les 5 KPIs du programme. Mettre en place le dashboard de suivi. Lancer le POC du data catalog sur 1 domaine (ex: donnees Client).
  • Jour 90 : Presentation au Comex : "Voici ce que nous avons fait en 90 jours, voici ce que nous avons appris, voici la roadmap 12 mois, voici le budget necessaire."

Piege a eviter : Ne pas essayer d'etre parfait. Les 90 premiers jours servent a creer de la credibilite et du momentum, pas a deployer un programme complet. Un quick win visible vaut mieux qu'un framework parfait sur papier.

La Data Governance est un marathon, pas un sprint. Les programmes les plus reussis que j'ai vus sont ceux qui ont commence petit (1 domaine de donnees, 5 stewards, 3 KPIs) et qui ont grandi organiquement. Les programmes qui ont echoue sont ceux qui ont essaye de tout gouverner en meme temps. Rappelez-vous : la governance n'est pas une fin en soi, c'est un moyen pour creer de la confiance dans les donnees. Si vos utilisateurs ne font pas plus confiance aux donnees apres votre programme, vous avez echoue - meme si vous avez 200 politiques documentees.

Lecon 11 : Master Data Management (MDM)

60 min Avance Module 2.2

Objectifs d'apprentissage

  • Comprendre les concepts fondamentaux du MDM : Golden Record, match/merge
  • Comparer les 4 styles d'architecture MDM
  • Concevoir un processus de deduplication et de matching
  • Evaluer les scenarios d'implementation MDM selon le contexte
  • Identifier les pieges classiques des projets MDM

Pourquoi le MDM est critique

Le Master Data Management gere les donnees maitres (master data) : les entites business fondamentales qui sont partagees a travers plusieurs systemes et processus. Les exemples classiques sont : Clients, Produits, Fournisseurs, Employes, Sites, Comptes, Instruments financiers.

Sans MDM, une entreprise typique a :

  • Client "Jean Dupont" enregistre 4 fois : "J. Dupont" dans le CRM, "Jean DUPONT" dans l'ERP, "Dupont Jean" dans le systeme de facturation, "Jean Dupont SA" dans le systeme juridique
  • Produit "Widget Pro" avec 3 codes differents selon le systeme
  • Aucune vue a 360 degres du client, du produit, ou du fournisseur

Le Golden Record

Le Golden Record est la version de verite unique d'une entite. C'est le resultat du processus de matching (identification des doublons) et de merging (fusion des attributs). Le Golden Record combine les meilleurs attributs de chaque source pour creer l'enregistrement le plus complet et le plus fiable. Exemple : l'email vient du CRM (le plus a jour), l'adresse vient de l'ERP (verifiee par la facturation), le SIRET vient du systeme juridique (verifie).

Les 4 Styles d'Architecture MDM

Il existe 4 approches architecturales pour le MDM, chacune avec ses avantages et ses compromis. Le choix depend de la maturite de l'organisation, de la complexite du paysage applicatif et du budget.

Les 4 Styles d'Architecture MDM
  STYLE 1 : REGISTRY                      STYLE 2 : CONSOLIDATION
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”               β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚   MDM Hub (Registry)   β”‚               β”‚  MDM Hub (Consolidationβ”‚
  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚               β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
  β”‚  β”‚ Index / Pointers  β”‚  β”‚               β”‚  β”‚  Golden Records  β”‚  β”‚
  β”‚  β”‚ (pas de donnees)  β”‚  β”‚               β”‚  β”‚  (copie complete) β”‚  β”‚
  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚               β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜               β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
          β”‚    β”‚    β”‚                              β–²    β–²    β–²
          β–Ό    β–Ό    β–Ό                              β”‚    β”‚    β”‚
  β”Œβ”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”                   β”Œβ”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”
  β”‚ CRM β”‚β”‚ ERP β”‚β”‚Billingβ”‚ ◄── Sources     β”‚ CRM β”‚β”‚ ERP β”‚β”‚Billingβ”‚ ◄── Sources
  β”‚(auth)β”‚β”‚(auth)β”‚β”‚(auth)β”‚     of truth    β”‚(auth)β”‚β”‚(auth)β”‚β”‚(auth)β”‚     of truth
  β””β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”˜                   β””β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”˜

  + Leger, non intrusif                   + Golden Record centralise
  + Implementation rapide                 + Vue 360 disponible
  - Pas de golden record physique         - Write-back non inclus
  - Qualite limitee aux sources           - Sources restent autoritatives

  STYLE 3 : COEXISTENCE                   STYLE 4 : CENTRALIZED (Transaction)
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”               β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚  MDM Hub (Coexistence) β”‚               β”‚ MDM Hub (Centralized)  β”‚
  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚               β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
  β”‚  β”‚  Golden Records  β”‚  β”‚               β”‚  β”‚  Golden Records  β”‚  β”‚
  β”‚  β”‚  (read + write)  β”‚  β”‚               β”‚  β”‚  SINGLE SOURCE   β”‚  β”‚
  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚               β”‚  β”‚   OF TRUTH       β”‚  β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜               β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
          β”‚    β”‚    β”‚  β–² β–² β–²               β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
          β–Ό    β–Ό    β–Ό  β”‚ β”‚ β”‚                       β”‚    β”‚    β”‚
  β”Œβ”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”β”‚ β”‚ β”‚               β”Œβ”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”
  β”‚ CRM β”‚β”‚ ERP β”‚β”‚Bill. β”‚β”‚ β”‚ β”‚               β”‚ CRM β”‚β”‚ ERP β”‚β”‚Bill. β”‚
  β”‚     β”‚β”‚     β”‚β”‚      β”œβ”˜ β”‚ β”‚               β”‚(sub)β”‚β”‚(sub)β”‚β”‚(sub) β”‚ ◄── Subscribers
  β”‚     β”‚β”‚     β”‚β””β”€β”€β”€β”€β”€β”€β”˜  β”‚ β”‚               β””β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”˜
  β”‚     β”‚β””β”€β”€β”€β”€β”€β”˜β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
  β””β”€β”€β”€β”€β”€β”˜β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜               + Source unique de verite
                                            + Controle total
  + Synchronisation bidirectionnelle        - Tres intrusif
  + Golden Record + sources autonomes       - Migration lourde
  - Complexite de synchronisation           - Risque eleve (SPOF)
  - Conflits possibles                      - Rarement implemente
StyleGolden RecordEcritureComplexiteCas d'usage ideal
RegistryVirtuel (pointeurs)Dans les sourcesFaiblePremier pas MDM, organisations immatures
ConsolidationPhysique (copie)Dans les sourcesMoyenneAnalytics, vue 360, pas besoin de write-back
CoexistencePhysique + syncHub ET sourcesEleveeOrganisations matures, donnees critiques
CentralizedPhysique (maitre)Hub uniquementTres eleveeGreenfield, domaines tres reglementes

Conseil pragmatique

La majorite des organisations devraient commencer par le style Consolidation. Il offre le meilleur rapport valeur/complexite : vous obtenez un Golden Record physique (exploitable par la BI et les analytics) sans avoir a modifier les systemes sources. Le style Registry est trop leger pour apporter une vraie valeur, et le Centralized est trop risque pour la plupart des contextes.

Le Processus Match & Merge

Le coeur du MDM est le processus de matching (identifier les doublons) et de merging (creer le Golden Record). C'est un processus technique et business a la fois.

Pipeline Match & Merge
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚ COLLECT  │───>β”‚STANDARDIZE───>β”‚  MATCH   │───>β”‚  MERGE   │───>β”‚ GOLDEN   β”‚
  β”‚          β”‚    β”‚          β”‚    β”‚          β”‚    β”‚          β”‚    β”‚ RECORD   β”‚
  β”‚Extraire  β”‚    β”‚Normaliserβ”‚    β”‚Identifierβ”‚    β”‚Fusionner β”‚    β”‚Publier   β”‚
  β”‚de chaque β”‚    β”‚adresses, β”‚    β”‚les pairesβ”‚    β”‚les attrs β”‚    β”‚et synchroβ”‚
  β”‚source    β”‚    β”‚noms, etc β”‚    β”‚candidatesβ”‚    β”‚best-of   β”‚    β”‚          β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                        β”‚               β”‚               β”‚
                        β–Ό               β–Ό               β–Ό
                  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                  β”‚ Regles   β”‚    β”‚ Algo de  β”‚    β”‚ Survivorshipβ”‚
                  β”‚ parsing  β”‚    β”‚ scoring  β”‚    β”‚ Rules     β”‚
                  β”‚ UPPERCASEβ”‚    β”‚ Exact=100β”‚    β”‚ CRM: emailβ”‚
                  β”‚ trim()   β”‚    β”‚ Fuzzy>85 β”‚    β”‚ ERP: addr β”‚
                  β”‚ phonetic β”‚    β”‚ Phone=90 β”‚    β”‚ Legal:SIREβ”‚
                  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
SQL
-- Exemple simplifie de matching par regles
-- Etape 1 : Standardisation
CREATE VIEW v_standardized_customers AS
SELECT
    source_system,
    customer_id,
    UPPER(TRIM(first_name)) AS first_name_std,
    UPPER(TRIM(last_name)) AS last_name_std,
    REGEXP_REPLACE(phone, '[^0-9]', '') AS phone_std,
    LOWER(TRIM(email)) AS email_std,
    SOUNDEX(last_name) AS last_name_soundex
FROM raw_customers;

-- Etape 2 : Matching (identifier les paires candidates)
CREATE TABLE match_candidates AS
SELECT
    a.source_system AS source_a,
    a.customer_id AS id_a,
    b.source_system AS source_b,
    b.customer_id AS id_b,
    -- Score de matching
    CASE WHEN a.email_std = b.email_std AND a.email_std IS NOT NULL
         THEN 40 ELSE 0 END
    + CASE WHEN a.phone_std = b.phone_std AND a.phone_std IS NOT NULL
           THEN 30 ELSE 0 END
    + CASE WHEN a.last_name_std = b.last_name_std THEN 15 ELSE
           CASE WHEN a.last_name_soundex = b.last_name_soundex
                THEN 8 ELSE 0 END END
    + CASE WHEN a.first_name_std = b.first_name_std THEN 15 ELSE 0 END
    AS match_score
FROM v_standardized_customers a
JOIN v_standardized_customers b
    ON a.source_system < b.source_system  -- eviter auto-match
    AND (a.email_std = b.email_std
         OR a.phone_std = b.phone_std
         OR (a.last_name_soundex = b.last_name_soundex
             AND a.first_name_std = b.first_name_std))
WHERE -- Score minimum pour etre candidat
    CASE WHEN a.email_std = b.email_std THEN 40 ELSE 0 END
    + CASE WHEN a.phone_std = b.phone_std THEN 30 ELSE 0 END
    + CASE WHEN a.last_name_std = b.last_name_std THEN 15 ELSE 0 END
    + CASE WHEN a.first_name_std = b.first_name_std THEN 15 ELSE 0 END
    >= 70;  -- Seuil de matching

-- Etape 3 : Survivorship Rules (quel attribut garder de quelle source)
-- Rgle : email du CRM, adresse de l'ERP, SIRET du Legal
CREATE TABLE golden_customers AS
SELECT
    m.golden_id,
    crm.email,           -- CRM = autorite pour l'email
    erp.address_line1,   -- ERP = autorite pour l'adresse
    erp.address_city,
    erp.address_zip,
    legal.siret,         -- Legal = autorite pour le SIRET
    COALESCE(crm.first_name, erp.first_name, legal.first_name) AS first_name,
    COALESCE(crm.last_name, erp.last_name, legal.last_name) AS last_name,
    COALESCE(crm.phone, erp.phone) AS phone,
    GREATEST(crm.updated_at, erp.updated_at, legal.updated_at) AS last_updated
FROM master_mapping m
LEFT JOIN crm_customers crm ON m.crm_id = crm.customer_id
LEFT JOIN erp_customers erp ON m.erp_id = erp.customer_id
LEFT JOIN legal_entities legal ON m.legal_id = legal.entity_id;

Echec MDM dans une entreprise pharmaceutique : $15M perdus

En 2019, un grand laboratoire pharmaceutique europeen a lance un projet MDM ambitieux pour unifier les donnees de ses Healthcare Professionals (HCPs) - medecins, pharmaciens, hospitaliers - a travers 12 pays. Le projet a ete arrete apres 30 mois et $15M depenses, sans resultat exploitable.

Ce qui s'est passe :

  • Erreur 1 - Scope trop large : Le projet visait 12 pays simultanement, chacun avec des formats d'adresses, des identifiants professionnels et des reglementations differents. Au lieu de commencer par 2-3 pays pilotes, ils ont voulu tout faire d'un coup.
  • Erreur 2 - MDM sans Data Quality : Les donnees sources etaient de qualite desastreuse (30% de doublons, 25% d'adresses invalides, 15% de medecins retraites encore actifs). Au lieu de nettoyer d'abord, ils ont verse les donnees sales dans le hub MDM. Resultat : "garbage in, garbage out" - le Golden Record etait aussi mauvais que les sources.
  • Erreur 3 - Choix architectural premature : Ils ont choisi le style Centralized (le plus complexe), forΓ§ant toutes les applications a ecrire dans le hub MDM. Les equipes locales ont resiste car ca changeait tous leurs processus.
  • Erreur 4 - Technologie avant processus : $4M depenses en licences Informatica MDM avant meme d'avoir defini les regles de matching et les survivorship rules. L'outil a ete configure 3 fois differemment car les regles business changeaient.
  • Erreur 5 - Pas de Data Stewards : Quand le matching automatique echouait (cas ambigus), il n'y avait personne pour faire le matching manuel. 40 000 cas en "pending review" se sont accumules sans jamais etre traites.

Lecons apprises :

  1. Commencez toujours par la Data Quality avant le MDM
  2. Pilotez sur un perimetre restreint (1-2 pays, 1 entite)
  3. Prevoyez des Data Stewards pour le matching manuel (10-15% des cas)
  4. Commencez par le style Consolidation, evoluez ensuite si necessaire
  5. Budget MDM realiste : 50% processus/personnes, 30% technologie, 20% donnees

MDM sans Data Quality d'abord

Le symptome : "On va implementer le MDM, ca va resoudre nos problemes de qualite." C'est l'equivalent de dire "on va demenager dans un nouvel appartement, ca va ranger nos affaires."

La realite : Le MDM est un amplificateur de la qualite existante. Si vos donnees sources sont de bonne qualite, le MDM cree un Golden Record excellent. Si vos donnees sont de mauvaise qualite, le MDM cree un Golden Record mauvais... avec un faux sentiment de confiance (parce qu'il y a un "Golden Record", les gens pensent que c'est fiable).

La bonne approche :

  1. D'abord : profiling des donnees sources (comprendre l'etat actuel)
  2. Ensuite : nettoyage et standardisation des donnees sources
  3. Puis : implementation du MDM sur des donnees propres
  4. Enfin : DQ monitoring continu sur le Golden Record ET les sources

Outils MDM du marche

OutilStyle supporteForcesFaiblessePrix indicatif
Informatica MDMTous les 4Le plus complet, leader du marcheComplexe, cher, lent a implementer$500K-$2M/an
Semarchy xDMConsolidation, CoexistenceAgile, rapide a deployer, UI moderneMoins connu, ecosysteme plus petit$150K-$500K/an
ReltioConsolidation, CoexistenceCloud-native, ML matching, API-firstJeune, moins de references$200K-$800K/an
SAP Master Data GovernanceCentralizedIntegration SAP nativeLie a l'ecosysteme SAPInclus dans les licences SAP
ProfiseeTousBon rapport qualite/prix, Microsoft ecosystemMoins de fonctionnalites avancees$100K-$400K/an

Le MDM est le projet data le plus difficile a mener. C'est a la fois technique (matching algorithmique), organisationnel (qui est le "owner" du client ?) et politique (quel systeme fait autorite ?). Mon conseil : commencez par un domaine de donnees ou la douleur business est la plus forte (souvent "Client" ou "Produit"), prouvez la valeur sur un perimetre restreint, puis etendez. Ne cherchez pas le Golden Record parfait - un Golden Record a 90% de precision qui existe est infiniment plus utile qu'un Golden Record a 100% qui n'existe pas.

Lecon 12 : Metadata & Data Catalogs

60 min Intermediaire Module 2.2

Objectifs d'apprentissage

  • Distinguer les 3 types de metadonnees : techniques, business et operationnelles
  • Comprendre le role du Data Catalog comme point d'entree vers les donnees
  • Maitriser le concept de Data Lineage et son importance
  • Comparer les principales solutions de data catalog du marche
  • Definir une strategie d'adoption du data catalog

Les 3 types de Metadata

Les metadonnees sont litteralement "les donnees sur les donnees". Sans metadonnees, une table de base de donnees est juste une grille de cellules sans contexte. Les metadonnees donnent le sens, le contexte et la confiance necessaires pour utiliser les donnees correctement.

Les 3 Familles de Metadata
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚                      METADATA UNIVERSE                          β”‚
  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
  β”‚   TECHNICAL         β”‚   BUSINESS          β”‚   OPERATIONAL       β”‚
  β”‚   METADATA          β”‚   METADATA          β”‚   METADATA          β”‚
  β”‚                     β”‚                     β”‚                     β”‚
  β”‚ Structure physique  β”‚ Sens et contexte    β”‚ Comportement et     β”‚
  β”‚ des donnees         β”‚ des donnees         β”‚ utilisation          β”‚
  β”‚                     β”‚                     β”‚                     β”‚
  β”‚ - Noms de tables    β”‚ - Definitions       β”‚ - Date creation     β”‚
  β”‚ - Types de colonnes β”‚   business          β”‚ - Derniere MAJ      β”‚
  β”‚ - Cles primaires/   β”‚ - Glossaire         β”‚ - Frequence refresh β”‚
  β”‚   etrangeres        β”‚ - Data Owner        β”‚ - Nb lignes         β”‚
  β”‚ - Index             β”‚ - Classification    β”‚ - Taille (GB)       β”‚
  β”‚ - Partitions        β”‚   (sensibilite)     β”‚ - Jobs ETL associes β”‚
  β”‚ - Format fichiers   β”‚ - Regles metier     β”‚ - SLA               β”‚
  β”‚ - Schema DDL        β”‚ - KPIs associes     β”‚ - Popularite        β”‚
  β”‚ - Connection stringsβ”‚ - Tags / domaines   β”‚ - Top utilisateurs  β”‚
  β”‚                     β”‚ - Data lineage      β”‚ - Requetes recentes β”‚
  β”‚                     β”‚   (business view)   β”‚ - Profiling stats   β”‚
  β”‚                     β”‚                     β”‚ - Erreurs recentes  β”‚
  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
  β”‚ Source: AUTO        β”‚ Source: HUMAIN +    β”‚ Source: AUTO         β”‚
  β”‚ (schema crawling)   β”‚ AUTO (NLP, ML)      β”‚ (monitoring, logs)  β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Pourquoi les metadata sont critiques

Sans metadonnees, un analyste qui decouvre une table t_cust_txn_dtl ne peut pas savoir : ce que contient cette table, si les donnees sont fiables, quand elles ont ete mises a jour, qui en est responsable, si elles sont utilisables pour son cas d'usage, ni d'ou elles viennent. Les metadonnees transforment des "donnees brutes" en "donnees comprehensibles et fiables".

Data Lineage : la traΓ§abilite des donnees

Le Data Lineage (lignage des donnees) trace le parcours d'une donnee de sa source a sa destination, en passant par toutes les transformations intermediaires. C'est l'equivalent de la traΓ§abilite alimentaire : pouvoir dire d'ou vient chaque ingredient du plat final.

Exemple de Data Lineage - Chiffre d'affaires mensuel
  SOURCE                    TRANSFORMATION                 DESTINATION
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚ ERP Oracle   β”‚         β”‚ ETL Spark    β”‚              β”‚ DWH Snowflakeβ”‚
  β”‚ orders table │────────>β”‚ Job: daily_  │─────────────>β”‚ fact_sales   β”‚
  β”‚              β”‚         β”‚ sales_load   β”‚              β”‚              β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜              β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
                                  β”‚                             β”‚
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”Œβ”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”              β”Œβ”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”
  β”‚ CRM Salesforceβ”‚        β”‚ Rules:       β”‚              β”‚ dbt model:   β”‚
  β”‚ opportunities │───────>β”‚ - Currency   β”‚              β”‚ monthly_     │──>  Dashboard
  β”‚              β”‚         β”‚   conversion β”‚              β”‚ revenue      β”‚     Tableau
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β”‚ - Tax removalβ”‚              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     "Revenue
                           β”‚ - Status     β”‚                                    Report"
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”‚   filter     β”‚
  β”‚ Ref Data     │────────>β”‚ - Join on    β”‚
  β”‚ dim_currency β”‚         β”‚   currency   β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

  Si le chiffre d'affaires est faux dans le dashboard, le lineage
  permet de remonter : est-ce l'ERP ? la conversion devise ?
  le filtre de statut ? le modele dbt ?

Le Data Catalog : Wikipedia de vos donnees

Un Data Catalog est une plateforme centralisee qui inventorie, documente et rend decouvrable l'ensemble des donnees d'une organisation. C'est le "Google" interne pour trouver les donnees dont on a besoin.

Fonctionnalites cles d'un Data Catalog

FonctionnaliteDescriptionValeur
DiscoveryRecherche full-text et filtree de datasets, tables, colonnesTrouver les donnees en secondes au lieu de jours
DocumentationDescriptions business, tags, glossaire, data ownersComprendre les donnees sans appeler quelqu'un
LineageVisualisation du parcours des donnees source-to-targetImpact analysis, debugging, confiance
ProfilingStatistiques automatiques : distribution, completude, uniciteEvaluer la qualite avant utilisation
Access ControlWorkflow de demande d'acces integreSelf-service securise
SocialReviews, ratings, questions/reponses, annotationsKnowledge sharing, adoption
Usage AnalyticsQui utilise quoi, popularite, requetes frequentesIdentifier les datasets cles, les experts

Comparaison des solutions de Data Catalog

CritereDataHub (LinkedIn)Amundsen (Lyft)AtlanCollibraMicrosoft Purview
TypeOpen-sourceOpen-sourceSaaSSaaS/On-premSaaS (Azure)
LineageExcellentBasiqueExcellentExcellentBon (Azure-centric)
SearchElasticsearchElasticsearchAI-poweredAvanceBon
GovernanceBasiqueLimiteeBonneBest-in-classBonne (Microsoft)
Connecteurs70+30+50+80+90+ (Azure bias)
UI/UXBonneCorrecteExcellenteCorporateCorrecte
Adoption easeMoyenMoyenFacileDifficileFacile si Azure
PrixGratuit + infraGratuit + infra$$$$$$$$$ (inclus Azure)
Ideal pourEquipes tech, startupsPetites equipes dataModern data teamsGrandes entreprisesEcosysteme Microsoft

Lyft : Open-source Amundsen Data Catalog

En 2019, Lyft a open-source Amundsen, son data catalog interne, nomme d'apres l'explorateur norvegien Roald Amundsen. Le projet est ne d'un probleme concret : avec plus de 10 000 datasets dans leur data lake, les data scientists passaient 30% de leur temps a chercher et comprendre les donnees au lieu de les analyser.

Le probleme initial chez Lyft

  • 10 000+ tables dans le data lake (Hive, Presto, Redshift)
  • 500+ data scientists et analystes
  • Pas de documentation centralisee - les gens envoyaient des messages Slack pour trouver la bonne table
  • "Tribal knowledge" : seules 2-3 personnes savaient ou trouver chaque donnee
  • Doublons de datasets : la meme donnee recopiee dans 5 schemas differents

La solution : Amundsen

  • Crawling automatique : Amundsen crawle automatiquement Hive, Presto, Redshift, PostgreSQL et extrait les metadonnees techniques (schemas, types, stats)
  • Search-first : Interface type Google - une barre de recherche comme point d'entree principal
  • Social features : Les utilisateurs peuvent tagger les owners, laisser des descriptions, noter la qualite des datasets
  • Usage-based ranking : Les tables les plus utilisees (basees sur les query logs) remontent en premier dans les resultats

Resultats apres 12 mois

  • Temps de decouverte des donnees : de 2-3 jours a 5-10 minutes
  • 80% des data scientists utilisent Amundsen quotidiennement
  • 60% de reduction des questions "ou est la donnee ?" sur Slack
  • Identification de 2 000 tables orphelines (non utilisees depuis 6+ mois) = economies de stockage

Lecon cle : Le succes d'Amundsen chez Lyft repose sur le fait que l'outil resolvait un probleme quotidien et tangible (perdre du temps a chercher des donnees). Ce n'etait pas un projet de "governance top-down" mais une solution a une douleur reelle des utilisateurs.

Data Catalog sans strategie d'adoption

Le scenario classique : L'equipe data achete/deploie un data catalog. Le crawling automatique est configure. Le catalog contient 5 000 tables avec leurs metadonnees techniques. L'equipe fait une demo. Et puis... personne ne l'utilise.

Pourquoi ca echoue :

  • Le catalog est vide de sens : Les metadonnees techniques (noms de colonnes, types) sont automatiques, mais les metadonnees business (descriptions, owners, regles metier) sont vides. Un catalog avec 5 000 tables sans descriptions est inutile.
  • Pas d'integration dans le workflow : Les analystes continuent d'utiliser leurs outils habituels (Slack, Excel, documentation Confluence). Le catalog est "un outil de plus" a consulter.
  • Pas de champion local : Personne dans les equipes metier ne porte l'adoption. C'est "le truc de l'equipe data".
  • Le syndrome du wiki vide : Comme un wiki d'entreprise que personne ne remplit, le catalog devient un desert informationnel.

La strategie d'adoption qui fonctionne :

  1. Commencer petit : Documenter les 50 tables les plus utilisees (basees sur les query logs). Pas 5 000.
  2. Rendre le catalog indispensable : Integrer le lien du catalog dans les outils existants (ajouter des liens vers le catalog dans dbt docs, dans Slack, dans les dashboards)
  3. Gamifier : Tracker et celebrer les contributions (descriptions ajoutees, tags, reviews)
  4. Data Stewards comme seeders : Les 10 premiers stewards documentent les 50 premieres tables. L'effet boule de neige suit.
  5. Bloquer sans catalog : Exiger une reference du catalog dans les pull requests dbt. Pas de merge sans documentation.

Implementation pratique : metadata-as-code

L'approche moderne est de gerer les metadonnees comme du code (metadata-as-code), versionne dans Git, automatiquement deploye. Voici un exemple avec dbt :

YAML - dbt schema.yml
# models/marts/finance/schema.yml
version: 2

models:
  - name: monthly_revenue
    description: |
      Chiffre d'affaires mensuel par business unit, calcule
      apres exclusion des retours et annulations.
      Source: ERP Oracle (orders) + CRM Salesforce (opportunities)
      Rafraichissement: quotidien a 06:00 UTC
    meta:
      owner: "finance-team@company.com"
      domain: "Finance"
      classification: "Confidential"
      sla: "disponible avant 08:00 UTC"
      tier: "Tier 1 - Critical"
    columns:
      - name: business_unit_id
        description: "Identifiant unique de la business unit (FK vers dim_business_unit)"
        tests:
          - not_null
          - relationships:
              to: ref('dim_business_unit')
              field: business_unit_id

      - name: month_key
        description: "Cle du mois au format YYYYMM"
        tests:
          - not_null

      - name: revenue_eur
        description: |
          Chiffre d'affaires net en EUR, apres:
          - Conversion devise au taux du jour de transaction
          - Exclusion des retours (status = 'returned')
          - Exclusion des annulations (status = 'cancelled')
          - Hors taxes (TVA exclue)
        tests:
          - not_null
          - dbt_utils.accepted_range:
              min_value: 0
              max_value: 1000000000

      - name: order_count
        description: "Nombre de commandes validees pour le mois"

      - name: avg_order_value_eur
        description: "Valeur moyenne par commande = revenue_eur / order_count"

Metadata-as-code : les avantages

En gerant les metadonnees dans des fichiers YAML versionnΓ©s dans Git, vous obtenez : versioning (qui a change quoi et quand), code review (les descriptions sont relues avant merge), CI/CD (les metadonnees sont deployees automatiquement dans le catalog), documentation toujours a jour (si le modele change, la doc change aussi). C'est la pratique recommandee dans les modern data stacks.

Le data catalog est l'outil le plus sous-estime de la stack data. Ce n'est pas sexy comme un moteur Spark ou un dashboard Tableau, mais c'est ce qui fait la difference entre "on a des donnees" et "on comprend nos donnees". Mon conseil numero un : ne lancez pas un data catalog comme un "projet de gouvernance". Lancez-le comme un "outil de productivite pour les analystes". Quand un analyste me dit "depuis qu'on a le catalog, je gagne 2 heures par jour", je sais que le projet est reussi.

Lecon 13 : Conformite RGPD & SOX

60 min Avance Module 2.2

Objectifs d'apprentissage

  • Maitriser les articles cles du RGPD et leurs implications pour le Data Architect
  • Realiser un DPIA (Data Protection Impact Assessment)
  • Comprendre les exigences SOX pour les donnees financieres
  • Implementer une classification des donnees a 4 niveaux
  • Concevoir des patterns de droit a l'effacement conformes au RGPD

RGPD : les articles cles pour le Data Architect

Le Reglement General sur la Protection des Donnees (RGPD/GDPR) est entre en vigueur le 25 mai 2018. Pour un Data Architect, le RGPD n'est pas qu'une contrainte juridique : c'est un ensemble d'exigences architecturales qui impactent la conception des systemes.

ArticlePrincipeImpact Architectural
Art. 5Minimisation des donneesNe collecter que le strict necessaire. Revoir chaque champ : est-il indispensable ?
Art. 6Base legale du traitementTracer la base legale de chaque traitement dans les metadonnees
Art. 15Droit d'accesPouvoir exporter toutes les donnees d'un individu en 30 jours
Art. 17Droit a l'effacementPouvoir supprimer toutes les donnees d'un individu de tous les systemes
Art. 20PortabiliteExporter en format structure et lisible par machine (JSON, CSV)
Art. 25Privacy by designIntegrer la protection des donnees des la conception
Art. 30Registre des traitementsMaintenir un inventaire de tous les traitements de donnees personnelles
Art. 32Securite du traitementChiffrement, pseudonymisation, controle d'acces
Art. 33Notification de violationDetecter et notifier une breach en 72h = monitoring en temps reel
Art. 35DPIA obligatoireAnalyse d'impact avant tout traitement a risque eleve

Les amendes RGPD sont reelles

Le RGPD prevoit des amendes jusqu'a 4% du chiffre d'affaires mondial annuel ou 20 millions d'euros (le montant le plus eleve). Ce n'est pas theorique : en 2023, Meta a ete condamnee a 1.2 milliard d'euros, Amazon a 746 millions, et des centaines d'entreprises plus modestes ont reΓ§u des amendes entre 50K et 50M euros.

DPIA - Data Protection Impact Assessment

Le DPIA (Article 35) est obligatoire pour tout traitement "susceptible d'engendrer un risque eleve" pour les droits et libertes des personnes. En pratique, c'est necessaire pour : le profilage, le traitement de donnees sensibles a grande echelle, la surveillance systematique.

Markdown - DPIA Template
# DATA PROTECTION IMPACT ASSESSMENT (DPIA)

## 1. Description du traitement
- **Nom du projet :** Systeme de scoring credit automatise
- **Responsable du traitement :** BankCo SA
- **DPO consulte :** Oui - Marie Dupont (marie.dupont@bankco.fr)
- **Date :** 2024-06-15

## 2. Finalite du traitement
Evaluer automatiquement la solvabilite des demandeurs de credit
immobilier en combinant des donnees bancaires internes et des
donnees externes (Banque de France, bureaux de credit).

## 3. Donnees traitees
| Categorie          | Donnees                        | Sensibilite   |
|-------------------|-------------------------------|---------------|
| Identite          | Nom, prenom, date naissance   | Personnel     |
| Financier         | Revenus, patrimoine, dettes   | Confidentiel  |
| Bancaire          | Historique comptes, incidents  | Confidentiel  |
| Scoring externe   | Score Banque de France         | Confidentiel  |
| Professionnel     | Employeur, anciennete          | Personnel     |

## 4. Base legale
- Article 6(1)(b) : Execution d'un contrat (demande de credit)
- Article 6(1)(f) : Interet legitime (evaluation du risque)

## 5. Evaluation des risques
| Risque                        | Probabilite | Impact | Niveau |
|-------------------------------|-------------|--------|--------|
| Discrimination algorithmique  | Moyen       | Eleve  | ELEVE  |
| Fuite de donnees financieres  | Faible      | Eleve  | MOYEN  |
| Scoring errone (faux positif) | Moyen       | Moyen  | MOYEN  |
| Non-exercice du droit d'acces | Faible      | Moyen  | FAIBLE |

## 6. Mesures d'attenuation
- **Discrimination :** Audit trimestriel du modele par variable
  protegee (genre, age, origine). Tests de fairness (equalized odds)
- **Fuite :** Chiffrement AES-256 au repos, TLS 1.3 en transit.
  Acces limite aux equipes credit (RBAC)
- **Scoring errone :** Droit a l'explication (Art. 22).
  Revue humaine obligatoire pour les refus
- **Droit d'acces :** API self-service pour telecharger son scoring

## 7. Conclusion
Risque residuel : ACCEPTABLE avec les mesures ci-dessus.
Prochaine revue : dans 12 mois ou si changement du modele.

Classification des Donnees - Matrice a 4 niveaux

La classification des donnees est le socle de la securite et de la conformite. Chaque donnee doit etre etiquetee avec un niveau de sensibilite qui determine les controles d'acces, de stockage et de traitement applicables.

Matrice de Classification des Donnees
  NIVEAU        DESCRIPTION                     EXEMPLES                CONTROLES
  ═══════════════════════════════════════════════════════════════════════════════════

  RESTREINT     Donnees dont la divulgation     - Mots de passe         - Chiffrement AES-256
  (Rouge)       causerait un dommage grave      - Numeros CB            - Acces nominatif
                a l'entreprise ou aux           - Donnees medicales     - MFA obligatoire
                personnes concernees            - Secrets industriels   - Logging exhaustif
                                                - PII sensibles         - Retention minimale
                                                                        - Pas de copie possible
  ─────────────────────────────────────────────────────────────────────────────────

  CONFIDENTIEL  Donnees internes sensibles      - Donnees financieres   - Chiffrement en transit
  (Orange)      dont l'acces est restreint      - Donnees RH/salaires   - RBAC strict
                a un groupe autorise            - Plans strategiques    - Audit trail
                                                - Donnees clients PII   - Backup chiffre
                                                - Contrats              - Masking en dev/test
  ─────────────────────────────────────────────────────────────────────────────────

  INTERNE       Donnees pour usage interne      - Procedures internes   - Authentification
  (Jaune)       uniquement                      - Organigrammes         - Pas de partage
                                                - Emails internes         externe
                                                - Rapports BI internes  - Sensibilisation
                                                - Code source           - Classification auto
  ─────────────────────────────────────────────────────────────────────────────────

  PUBLIC        Donnees pouvant etre            - Site web              - Integrite
  (Vert)        divulguees publiquement         - Communiques presse    - Validation avant
                sans dommage                    - Rapports annuels        publication
                                                - Documentation API     - Pas de PII

SOX (Sarbanes-Oxley) pour le Data Architect

La loi SOX (2002) s'applique a toutes les entreprises cotees aux Etats-Unis. Elle impose des controles stricts sur les donnees financieres pour prevenir les fraudes (post-scandales Enron, WorldCom). Pour le Data Architect, les sections cles sont :

Section 302 : Responsabilite du management

Le CEO et le CFO doivent certifier personnellement l'exactitude des rapports financiers. Implication : les donnees qui alimentent ces rapports doivent etre tracables, auditables et verifiees.

Section 404 : Controles internes

Obligation de documenter et tester les controles internes sur le reporting financier. Implication pour le Data Architect :

  • Data lineage complet : De la transaction source au rapport financier, chaque transformation doit etre documentee
  • Controles automatises : Reconciliation automatique entre systemes, checks de completude, validations croisees
  • Audit trail : Qui a modifie quoi, quand, pourquoi. Immutable, non suppressible
  • Segregation of duties : Celui qui cree une transaction ne peut pas l'approuver. Celui qui administre le systeme ne peut pas modifier les donnees
  • Change management : Toute modification d'un pipeline de donnees financieres doit etre documentee et approuvee
SQL
-- Exemple de controle SOX : reconciliation journal entries
-- Ce check tourne chaque nuit apres le chargement du DWH

-- Controle 1 : Total du DWH = Total du GL (General Ledger)
SELECT
    CASE
        WHEN ABS(dwh.total_amount - gl.total_amount) < 0.01
        THEN 'PASS'
        ELSE 'FAIL - ECART: ' ||
             CAST(dwh.total_amount - gl.total_amount AS VARCHAR)
    END AS sox_control_result,
    dwh.total_amount AS dwh_total,
    gl.total_amount AS gl_total,
    CURRENT_TIMESTAMP AS check_timestamp
FROM (
    SELECT SUM(amount) AS total_amount
    FROM dwh.fact_journal_entries
    WHERE posting_date = CURRENT_DATE - 1
) dwh
CROSS JOIN (
    SELECT SUM(amount) AS total_amount
    FROM erp.gl_journal_entries
    WHERE posting_date = CURRENT_DATE - 1
) gl;

-- Controle 2 : Audit trail - toute modification est loggee
CREATE TABLE audit.financial_data_changes (
    change_id       BIGINT IDENTITY PRIMARY KEY,
    table_name      VARCHAR(100) NOT NULL,
    record_id       BIGINT NOT NULL,
    field_name      VARCHAR(100) NOT NULL,
    old_value       VARCHAR(500),
    new_value       VARCHAR(500),
    changed_by      VARCHAR(100) NOT NULL,
    changed_at      TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    change_reason   VARCHAR(500) NOT NULL,
    approved_by     VARCHAR(100),  -- Segregation of duties
    approved_at     TIMESTAMP
    -- Cette table est en INSERT ONLY : pas de UPDATE ni DELETE
);

Droit a l'effacement - Patterns d'implementation

L'article 17 du RGPD donne aux personnes le droit de demander la suppression de leurs donnees personnelles. C'est un cauchemar architectural si le systeme n'a pas ete concu pour ca. Voici les patterns d'implementation :

3 Patterns pour le Droit a l'Effacement
  PATTERN 1 : HARD DELETE               PATTERN 2 : SOFT DELETE + ANONYMISATION
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”               β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚ Supprimer physiquementβ”‚               β”‚ Remplacer les PII par des    β”‚
  β”‚ la ligne de la base  β”‚               β”‚ valeurs anonymisees          β”‚
  β”‚                      β”‚               β”‚                              β”‚
  β”‚ DELETE FROM customers β”‚               β”‚ UPDATE customers SET          β”‚
  β”‚ WHERE id = 12345;    β”‚               β”‚   name = 'ANONYMISE',        β”‚
  β”‚                      β”‚               β”‚   email = 'del_xxx@anon.com',β”‚
  β”‚ + Simple             β”‚               β”‚   phone = NULL,              β”‚
  β”‚ - Casse les FK       β”‚               β”‚   address = NULL,            β”‚
  β”‚ - Perd l'historique  β”‚               β”‚   is_deleted = TRUE          β”‚
  β”‚ - Audit trail ?      β”‚               β”‚ WHERE id = 12345;            β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜               β”‚                              β”‚
                                         β”‚ + Preserve les FK            β”‚
  PATTERN 3 : CRYPTO SHREDDING           β”‚ + Analytics intactes         β”‚
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”               β”‚ + Audit trail                β”‚
  β”‚ Chiffrer les PII avecβ”‚               β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
  β”‚ une cle par personne β”‚
  β”‚ Pour "effacer" :     β”‚
  β”‚ detruire la cle      β”‚
  β”‚                      β”‚
  β”‚ Donnees chiffrees    β”‚
  β”‚ deviennent illisiblesβ”‚
  β”‚ = effacement logique β”‚
  β”‚                      β”‚
  β”‚ + Le plus elegant    β”‚
  β”‚ + Rapide et scalable β”‚
  β”‚ + Fonctionne partout β”‚
  β”‚   (meme les backups) β”‚
  β”‚ - Complexe a mettre  β”‚
  β”‚   en place           β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Pattern recommande : Soft Delete + Anonymisation

Pour la majorite des cas, le Pattern 2 est le meilleur compromis. Il preserve l'integrite referentielle (les FK restent valides), permet de garder les metriques business (nombre de commandes, revenue historique) tout en supprimant les PII. Le Crypto Shredding est ideal pour les architectures data lake ou les donnees sont reparties dans de nombreux fichiers. Le Hard Delete est a eviter sauf pour les systemes isoles sans FK.

Amazon RGPD : 746M euros d'amende - Que s'est-il passe ?

En juillet 2021, la CNPD (Commission Nationale pour la Protection des Donnees) du Luxembourg a inflige a Amazon la plus grosse amende RGPD de l'histoire a cette date : 746 millions d'euros. L'amende a ete rendue publique dans le rapport annuel 10-K d'Amazon aupres de la SEC.

Le contexte

  • La plainte initiale a ete deposee en 2018 par La Quadrature du Net (ONG francaise) au nom de 10 000 personnes
  • L'enquete portait sur le systeme de publicite ciblee d'Amazon et le traitement des donnees personnelles a des fins de ciblage publicitaire
  • Le traitement a ete juge non conforme car le consentement n'etait pas valablement recueilli selon les standards du RGPD

Les violations identifiees

  • Art. 6 - Base legale insuffisante : Amazon traitait des donnees comportementales massives pour le ciblage publicitaire sans base legale adequat. Le "consentement" etait enfoui dans des conditions generales que personne ne lisait
  • Art. 7 - Conditions du consentement : Le consentement n'etait pas "libre, specifique, eclaire et univoque" comme l'exige le RGPD. Les utilisateurs ne pouvaient pas facilement refuser le tracking
  • Art. 12-14 - Transparence : Informations insuffisantes sur la maniere dont les donnees etaient collectees, traitees et partagees avec les partenaires publicitaires

Implications architecturales

  • Consent Management Platform (CMP) : Necessite un systeme robuste de gestion du consentement, granulaire par finalite
  • Data Processing Records : Chaque traitement de donnees doit etre documente avec sa base legale dans un registre auditable
  • Privacy by Design : Le ciblage publicitaire doit etre concu avec des options de refus claires et effectives
  • Data Lineage pour le marketing : Tracer exactement quelles donnees personnelles alimentent quels algorithmes de ciblage

Lecon pour le Data Architect : La conformite RGPD n'est pas un sujet juridique - c'est un sujet architectural. Si votre systeme ne peut pas repondre aux questions "quelles donnees traitons-nous ?", "sur quelle base legale ?", "l'utilisateur a-t-il consenti ?" et "comment supprimer ses donnees ?", vous avez un probleme d'architecture, pas un probleme de droit.

En tant que Data Architect, votre role n'est pas de devenir juriste RGPD. Mais vous devez comprendre les implications architecturales de chaque article. Mon conseil pratique : a chaque fois que vous concevez un systeme qui traite des donnees personnelles, posez-vous 4 questions : 1) Comment je retrouve toutes les donnees d'un individu ? (Art. 15) 2) Comment je les supprime ? (Art. 17) 3) Comment je les exporte ? (Art. 20) 4) Comment je prouve que tout est conforme ? (Art. 30). Si vous ne pouvez pas repondre a ces 4 questions, votre architecture a un probleme.

Lecon 14 : OBT & Activity Schema

45 min Avance Module 2.2

Objectifs d'apprentissage

  • Comprendre le pattern OBT (One Big Table) et ses cas d'usage
  • Maitriser l'Activity Schema et son approche event-centric
  • Evaluer quand utiliser OBT vs Star Schema vs Activity Schema
  • Identifier les limites et anti-patterns des wide tables
  • Concevoir des modeles hybrides adaptes au contexte

Le Pattern OBT - One Big Table

Le OBT (One Big Table), aussi appele "wide table" ou "flat table", est un pattern de modelisation ou toutes les donnees necessaires a l'analyse sont pre-jointes dans une seule table large. Au lieu d'un star schema avec une fact table et N dimensions, on a une seule table avec toutes les colonnes.

Pourquoi le OBT a emerge

Le OBT est ne de l'evolution des moteurs analytiques modernes. Des outils comme BigQuery, Snowflake, Databricks et ClickHouse utilisent le stockage en colonnes (columnar storage) : ils ne lisent que les colonnes demandees dans la requete. Avoir 500 colonnes mais n'en lire que 5 est presque aussi rapide que d'avoir une table de 5 colonnes. Le cout des JOINs (en performance et en complexite SQL) devient un handicap inutile quand le moteur gere efficacement les wide tables.

Star Schema vs OBT - Comparison Architecturale
  STAR SCHEMA (Kimball)                    ONE BIG TABLE (OBT)
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚  dim_customer  β”‚                        β”‚          obt_sales                 β”‚
  β”‚ - customer_id  β”‚                        β”‚                                    β”‚
  β”‚ - name         β”‚                        β”‚ - order_id                         β”‚
  β”‚ - segment      β”‚                        β”‚ - order_date                       β”‚
  β”‚ - city         β”‚\                       β”‚ - order_amount                     β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ \   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚ - customer_id                      β”‚
                     \──│ fact_sales    β”‚   β”‚ - customer_name                    β”‚
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  /──│ - order_id   β”‚   β”‚ - customer_segment                 β”‚
  β”‚  dim_product   β”‚/   β”‚ - customer_idβ”‚   β”‚ - customer_city                    β”‚
  β”‚ - product_id   β”‚\   β”‚ - product_id β”‚   β”‚ - product_id                       β”‚
  β”‚ - name         β”‚ \──│ - date_id    β”‚   β”‚ - product_name                     β”‚
  β”‚ - category     β”‚ /──│ - amount     β”‚   β”‚ - product_category                 β”‚
  β”‚ - brand        β”‚/   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚ - product_brand                    β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ \                       β”‚ - date_year                        β”‚
                     \  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚ - date_quarter                     β”‚
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  \─│ dim_date     β”‚   β”‚ - date_month                       β”‚
  β”‚  dim_store     β”‚  /─│ - date_id    β”‚   β”‚ - store_id                         β”‚
  β”‚ - store_id     β”‚/   β”‚ - year       β”‚   β”‚ - store_name                       β”‚
  β”‚ - name         β”‚    β”‚ - quarter    β”‚   β”‚ - store_region                     β”‚
  β”‚ - region       β”‚    β”‚ - month      β”‚   β”‚ - is_weekend                       β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚ - is_promotion_day                 β”‚
                                           β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
  5 tables, 4 JOINs                        1 table, 0 JOINs
  Requetes complexes                       Requetes simples
  Bonne pour DWH traditionnel              Bonne pour analytics self-service

Avantages du OBT

  • Simplicite des requetes : Pas de JOINs = requetes plus simples, moins d'erreurs, analystes autonomes
  • Performance : Sur les moteurs columnar, pas de cout de JOIN. Scan de colonnes uniquement
  • Self-service : Les analystes et data scientists peuvent querier directement sans comprendre le schema
  • Outils BI : Les outils comme Looker, Metabase ou Tableau fonctionnent mieux avec des tables plates

Inconvenients du OBT

  • Redondance : Les attributs dimensionnels sont repetes pour chaque fait (customer_name repete 1M de fois)
  • Maintenance : Si un attribut dimensionnel change (customer_segment), il faut rebuilder tout le OBT
  • Coherence : Risque d'inconsistance si le OBT n'est pas reconstruit apres une mise a jour dimensionnelle
  • Taille : Peut devenir tres large (100+ colonnes) et difficile a naviguer

Activity Schema - L'approche Event-Centric

L'Activity Schema est un pattern de modelisation propose par Ahmed Elsamadisi (fondateur de Narrator.ai) comme alternative radicale au star schema. L'idee : au lieu de modeliser autour d'entites (clients, produits), on modelise autour d'activites (evenements qui se produisent).

Le principe fondamental

Dans l'Activity Schema, tout est un evenement avec un timestamp. "Le client #123 a passe une commande" est une activite. "Le client #123 a contacte le support" est une activite. "Le produit #456 a ete vu sur le site" est une activite. Toutes ces activites sont stockees dans une meme table, avec une structure unifiee.

SQL
-- Activity Schema : la structure de base
CREATE TABLE activity_stream (
    -- Identite
    activity_id     BIGINT PRIMARY KEY,      -- ID unique de l'activite
    entity_id       VARCHAR(100) NOT NULL,    -- ID de l'entite (customer, product...)
    entity_type     VARCHAR(50) NOT NULL,     -- 'customer', 'product', 'employee'

    -- Activite
    activity        VARCHAR(100) NOT NULL,    -- 'placed_order', 'contacted_support'
    ts              TIMESTAMP NOT NULL,       -- Quand l'activite s'est produite

    -- Attributs flexibles (JSON ou colonnes dediees)
    feature_1       VARCHAR(500),             -- Attribut contextuel 1
    feature_2       VARCHAR(500),             -- Attribut contextuel 2
    feature_3       VARCHAR(500),             -- Attribut contextuel 3
    revenue_impact  DECIMAL(15,2),            -- Impact financier (si applicable)

    -- Metadata
    source_system   VARCHAR(50),
    loaded_at       TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Exemples de donnees
INSERT INTO activity_stream VALUES
-- Client 123 passe une commande
(1, 'cust_123', 'customer', 'placed_order',
 '2024-01-15 10:30:00', 'order_456', 'electronics', 'online', 299.99, 'ecommerce', NOW()),
-- Client 123 contacte le support
(2, 'cust_123', 'customer', 'contacted_support',
 '2024-01-16 14:00:00', 'ticket_789', 'complaint', 'email', NULL, 'zendesk', NOW()),
-- Client 123 retourne un produit
(3, 'cust_123', 'customer', 'returned_product',
 '2024-01-18 09:00:00', 'return_012', 'defective', NULL, -299.99, 'ecommerce', NOW());

-- Requete : timeline complete d'un client
SELECT activity, ts, feature_1, revenue_impact
FROM activity_stream
WHERE entity_id = 'cust_123'
ORDER BY ts;

-- Requete : customers qui ont commande puis contacte le support dans les 7 jours
SELECT
    a.entity_id,
    a.ts AS order_date,
    b.ts AS support_date,
    DATEDIFF(day, a.ts, b.ts) AS days_between
FROM activity_stream a
JOIN activity_stream b
    ON a.entity_id = b.entity_id
    AND a.activity = 'placed_order'
    AND b.activity = 'contacted_support'
    AND b.ts BETWEEN a.ts AND a.ts + INTERVAL '7 days';

Comparaison : Star Schema vs OBT vs Activity Schema

CritereStar SchemaOBTActivity Schema
PhilosophieEntity-centric, normalisePre-joined, denormaliseEvent-centric, temporel
StructureFacts + Dimensions1 table large1 table d'activites
JOINsBeaucoup (fact-dim)AucunSelf-joins (temporels)
FlexibiliteMoyenne (schema fixe)Faible (rebuild complet)Elevee (ajouter activites)
Requetes temporellesComplexeComplexeNatif (timeline built-in)
Self-serviceDifficile pour non-techFacileMoyen (concept a apprendre)
PerformanceBonne (avec index)Excellente (columnar)Bonne (partition par activity)
Cas d'usage idealDWH traditionnel, BI standardAnalytics self-service, ML featuresCustomer journey, product analytics, funnel
Complexite de buildMoyenneFaibleElevee (mapping des activites)
Maturite30+ ans, proven5-10 ans, populaire3-5 ans, emerging

Quand utiliser quoi ?

  • Star Schema : Reporting financier structure, KPIs standards, equipes BI traditionnelles, compliance SOX
  • OBT : Analytics self-service, feature store pour ML, equipes data modernes, dashboards BI
  • Activity Schema : Customer journey analysis, product analytics, funnel optimization, cohortes
  • En pratique : La plupart des organisations modernes utilisent un mix : star schema pour le reporting financier, OBT pour le self-service, activity schema pour le product analytics

Comment Benn Stancil (Mode Analytics) a popularise le OBT

Benn Stancil, co-fondateur et ancien CTO de Mode Analytics (outil de BI collaborative), est devenu l'un des plus ardents defenseurs du pattern OBT a travers une serie d'articles influents sur Substack ("benn.substack") qui ont secoue la communaute data entre 2021 et 2023.

La these de Benn Stancil

Son argument central : "Le star schema est une optimisation pour les contraintes des annees 90". A l'epoque, le stockage coutait cher, la RAM etait limitee, et les JOINs etaient necessaires pour eviter la redondance. En 2024, le stockage coute quasi-rien, les moteurs columnar (Snowflake, BigQuery) sont optimises pour les wide tables, et la complexite des JOINs est le principal frein a l'adoption du self-service analytics.

L'experience chez Mode Analytics

  • Constat : Les clients de Mode qui utilisaient des star schemas avaient des taux d'adoption 40% plus faibles que ceux qui utilisaient des tables plates
  • Raison : Les analystes business ne comprenaient pas les JOINs et faisaient des erreurs (fan-out, duplications)
  • Solution : Encourager les clients a creer des "marts" sous forme de OBT pour le self-service, tout en gardant le star schema en amont

L'approche hybride recommandee

Stancil ne recommande pas d'abandonner le star schema. Sa recommandation est une architecture en couches :

  1. Staging : Donnees brutes (raw)
  2. Intermediate : Star schema (facts + dimensions) pour les data engineers
  3. Marts : OBT (pre-joined) pour les analystes et outils BI

C'est exactement le pattern "staging > intermediate > marts" que dbt recommande.

OBT avec 500+ colonnes

Le symptome : "On met tout dans le OBT pour que les analystes aient tout sous la main." Le OBT grossit de semaine en semaine : 50 colonnes, puis 100, puis 200, puis 500...

Ce qui se passe :

  • Navigabilite zero : Avec 500 colonnes, personne ne sait ce qui existe. Les analystes utilisent toujours les memes 20 colonnes et ignorent les 480 autres
  • Build time explosif : Le OBT est reconstruit quotidiennement en joignant 30+ tables. Le build prend 4 heures et consomme des milliers de dollars de compute
  • Fragilite : Un changement dans une source casse le OBT entier. Un NULL inattendu dans une FK fait disparaitre des lignes
  • Confusion semantique : customer_name vs customer_display_name vs billing_customer_name - 3 colonnes qui semblent pareilles mais ne le sont pas

La bonne pratique :

  • Un OBT par domaine metier : obt_sales, obt_marketing, obt_finance - pas un OBT unique pour toute l'entreprise
  • Maximum 80-100 colonnes par OBT. Au-dela, scinder en sous-domaines
  • Nommage strict : Convention de nommage enforced (ex: {entity}_{attribute})
  • Documentation obligatoire : Chaque colonne doit avoir une description dans le schema.yml dbt

Le debat "Star Schema vs OBT" est un faux debat. Les deux patterns ont leur place, et les meilleurs data teams utilisent les deux. Mon conseil : gardez le star schema comme "source de verite structuree" dans votre couche intermediate, et construisez des OBTs cibles dans votre couche marts pour le self-service. L'Activity Schema est plus niche mais extremement puissant pour l'analytics produit et le customer journey. Ne choisissez pas un pattern par dogme - choisissez-le par besoin.

16. ETL vs ELT

45 min Intermediaire

Objectifs d'apprentissage

  • Comprendre les differences fondamentales entre ETL et ELT
  • Savoir quand utiliser chaque approche selon le contexte
  • Comparer les principaux outils ETL et ELT du marche
  • Evaluer les couts, performances et maintenabilite de chaque pattern
  • Concevoir un pipeline de donnees adapte aux besoins metier

Introduction : Deux philosophies de transformation

L'integration de donnees est au coeur de toute architecture data. La question fondamentale est : ou effectuer les transformations ? Avant le chargement (ETL) ou apres (ELT) ? Ce choix apparemment simple a des implications profondes sur la scalabilite, le cout, la gouvernance et l'agilite de votre plateforme.

Concept cle : ETL vs ELT

ETL (Extract-Transform-Load) : Les donnees sont extraites de sources, transformees dans un serveur intermediaire dedie, puis chargees dans le systeme cible. Approche traditionnelle nee avec les data warehouses on-premise.

ELT (Extract-Load-Transform) : Les donnees sont extraites et chargees brutes dans le systeme cible (cloud data warehouse), puis transformees directement dans celui-ci en exploitant sa puissance de calcul. Approche moderne nee avec le cloud.

La question n'est plus "ETL ou ELT ?" mais "Quel ratio de transformations doit se faire avant vs apres le chargement ?". Dans la realite, la plupart des architectures modernes utilisent un hybride intelligent.

ETL : L'approche traditionnelle en detail

Fonctionnement

Dans un pipeline ETL classique, un serveur ETL dedie (souvent un cluster de machines) orchestre tout le processus :

  1. Extract : Connexion aux sources (bases relationnelles, fichiers plats, APIs) et extraction incrementale ou full des donnees
  2. Transform : Sur le serveur ETL, les donnees sont nettoyees, validees, enrichies, aggregees et formatees selon le schema cible
  3. Load : Les donnees transformees et conformes sont chargees dans le data warehouse

Forces de l'ETL

  • Qualite garantie : Seules les donnees propres et conformes arrivent dans le DWH
  • Securite : Les donnees sensibles peuvent etre masquees/tokenisees avant chargement
  • Charge reduite sur le DWH : Le warehouse ne subit pas la charge de transformation
  • Conformite : Facilite les audits car les transformations sont tracees hors du DWH
  • Maturite des outils : Informatica, SSIS, DataStage ont 20+ ans de production

Faiblesses de l'ETL

  • Latence : Le passage par un serveur intermediaire ajoute du temps
  • Scalabilite limitee : Le serveur ETL est un bottleneck
  • Cout d'infrastructure : Serveurs ETL dedies a provisionner et maintenir
  • Rigidite : Modifier une transformation necessite un redeveloppement complet du pipeline
  • Perte de donnees brutes : Les donnees originales ne sont souvent pas conservees
Python - Pipeline ETL classique (Informatica style)
# Pipeline ETL traditionnel - pseudo-code
class ETLPipeline:
    def __init__(self, source_config, target_config):
        self.source = SourceConnector(source_config)
        self.target = TargetConnector(target_config)
        self.staging_db = StagingDatabase()

    def extract(self):
        """Phase 1: Extraction des sources"""
        raw_data = self.source.read_incremental(
            since=self.get_last_watermark()
        )
        # Donnees brutes dans staging temporaire
        self.staging_db.write('staging_raw', raw_data)
        return raw_data

    def transform(self, raw_data):
        """Phase 2: Transformation sur serveur ETL"""
        # Nettoyage
        cleaned = self.clean_nulls(raw_data)
        cleaned = self.standardize_dates(cleaned)
        cleaned = self.validate_business_rules(cleaned)

        # Enrichissement
        enriched = self.lookup_reference_data(cleaned)
        enriched = self.apply_business_logic(enriched)

        # Conformite
        conformed = self.map_to_target_schema(enriched)
        conformed = self.mask_pii_columns(conformed)  # RGPD

        # Qualite
        self.run_quality_checks(conformed)
        return conformed

    def load(self, transformed_data):
        """Phase 3: Chargement dans le DWH"""
        self.target.bulk_insert(
            table='dim_customer',
            data=transformed_data,
            mode='merge'  # SCD Type 2
        )
        self.update_watermark()

    def run(self):
        raw = self.extract()
        transformed = self.transform(raw)
        self.load(transformed)

ELT : L'approche moderne en detail

Fonctionnement

L'ELT exploite la puissance de calcul massive des cloud data warehouses (Snowflake, BigQuery, Redshift, Databricks) :

  1. Extract : Les connecteurs (Fivetran, Airbyte, Stitch) extraient les donnees des sources
  2. Load : Les donnees brutes sont chargees telles quelles dans une zone "raw" du warehouse
  3. Transform : Les transformations sont executees directement dans le warehouse via SQL (dbt, Dataform)

Forces de l'ELT

  • Vitesse : Pas de bottleneck intermediaire, chargement rapide des donnees brutes
  • Scalabilite : Le cloud warehouse scale horizontalement pour les transformations
  • Conservation des donnees brutes : Possibilite de re-transformer a tout moment
  • Agilite : Les analystes SQL peuvent creer de nouvelles transformations sans devops
  • Cout optimise : Pas de serveur ETL dedie, paiement a l'usage
  • Versionning : dbt permet de versionner les transformations SQL dans Git

Faiblesses de l'ELT

  • Donnees brutes dans le warehouse : Risques de securite si mal gouverne
  • Cout compute : Les transformations consomment des credits warehouse (potentiellement cher)
  • Gouvernance : Sans discipline, le warehouse devient un "data swamp"
  • Complexite SQL : Certaines transformations complexes sont penibles en SQL pur
SQL - Pipeline ELT avec dbt
-- models/staging/stg_orders.sql (dbt model)
-- Phase "Transform" executee DANS le warehouse

WITH source AS (
    -- Donnees brutes chargees par Fivetran/Airbyte
    SELECT * FROM {{ source('raw', 'orders') }}
),

cleaned AS (
    SELECT
        id AS order_id,
        TRIM(LOWER(customer_email)) AS customer_email,
        CAST(order_date AS DATE) AS order_date,
        CAST(amount AS DECIMAL(12,2)) AS order_amount,
        UPPER(currency) AS currency,
        -- Nettoyage des statuts
        CASE
            WHEN status IN ('cancelled', 'canceled', 'annule')
                THEN 'CANCELLED'
            WHEN status IN ('completed', 'done', 'termine')
                THEN 'COMPLETED'
            WHEN status IN ('pending', 'en_attente')
                THEN 'PENDING'
            ELSE 'UNKNOWN'
        END AS order_status,
        _fivetran_synced AS loaded_at
    FROM source
    WHERE id IS NOT NULL
      AND order_date >= '2020-01-01'  -- Filtre qualite
),

validated AS (
    SELECT
        *,
        -- Tests de qualite inline
        CASE WHEN order_amount < 0 THEN TRUE ELSE FALSE END AS is_suspicious
    FROM cleaned
)

SELECT * FROM validated

-- schema.yml pour les tests dbt
-- version: 2
-- models:
--   - name: stg_orders
--     columns:
--       - name: order_id
--         tests: [unique, not_null]
--       - name: order_amount
--         tests: [not_null, positive_values]

Diagramme comparatif des flux

ETL vs ELT - Flux de donnees
  ETL TRADITIONNEL
  ================

  +----------+     +-------------------+     +-------------+
  | Sources  |---->| Serveur ETL       |---->| Data        |
  |          |     | (Transform)       |     | Warehouse   |
  | - SGBD   |     |                   |     |             |
  | - Files  |     | 1. Clean          |     | Donnees     |
  | - APIs   |     | 2. Validate       |     | PROPRES     |
  | - SAP    |     | 3. Enrich         |     | uniquement  |
  +----------+     | 4. Conform        |     +-------------+
                   | 5. Mask PII       |
                   +-------------------+
                   CPU/RAM du serveur ETL
                   = BOTTLENECK


  ELT MODERNE
  ============

  +----------+     +------------------------------------------+
  | Sources  |---->| Cloud Data Warehouse                     |
  |          |     |                                          |
  | - SGBD   |     | +-----------+    +---------------------+ |
  | - Files  |     | | Zone RAW  |--->| Zone TRANSFORM      | |
  | - APIs   |     | | (brut)    |    | (dbt / Dataform)    | |
  | - SaaS   |     | |           |    |                     | |
  | - Events |     | | Fivetran  |    | 1. stg_ (staging)   | |
  +----------+     | | Airbyte   |    | 2. int_ (intermedi) | |
                   | | Stitch    |    | 3. mart_ (business) | |
                   | +-----------+    +---------------------+ |
                   |                                          |
                   | CPU/RAM ELASTIQUE du warehouse           |
                   +------------------------------------------+


  HYBRIDE (REALITE)
  =================

  +----------+    +------------+    +-----------------------------+
  | Sources  |--->| Pre-process|    | Cloud Data Warehouse        |
  |          |    |            |--->|                             |
  | - SGBD   |    | - PII mask |    | RAW --> STAGING --> MARTS   |
  | - APIs   |    | - Format   |    |                             |
  | - Files  |    | - Validate |    | Transformations metier      |
  +----------+    +------------+    | dans le warehouse (dbt)     |
                   Leger!           +-----------------------------+

Matrice de decision : ETL vs ELT

CritereETLELTRecommandation
Volume de donneesLimite par le serveur ETL (< 10 TB)Scale avec le warehouse (PB+)ELT si > 1 TB/jour
Latence requiseMinutes a heures (batch)Secondes a minutes (micro-batch)ELT pour near-real-time
Securite/CompliancePII masquee avant stockagePII dans le raw layerETL pour donnees tres sensibles
Competences equipeProfils ETL specialises (Informatica, SSIS)SQL + dbt (analytics engineers)ELT si equipe SQL-first
BudgetLicence ETL + serveurs dedies (100K+/an)Pay-per-query warehouseELT pour startups/PME
AgiliteCycle de dev long (semaines)Nouveau modele en heuresELT pour equipes agiles
Legacy systemsExcellent support mainframe/SAPConnecteurs SaaS/cloudETL pour migration legacy
Qualite donneesGarantie avant chargementTests post-chargement (dbt tests)Equivalent avec bons process
AuditabiliteLogs centralises du serveur ETLLineage dbt + warehouse auditELT avec dbt meilleur lineage
Re-traitementRelancer le pipeline completRe-run SQL sur donnees brutesELT beaucoup plus simple

Decision rapide

Choisissez ETL si : Vous avez des systemes legacy, des contraintes de securite strictes pre-chargement, ou des equipes expertes en outils ETL traditionnels.

Choisissez ELT si : Vous etes cloud-native, votre equipe maitrise SQL, vous avez besoin d'agilite et de scalabilite.

Comparaison des outils

OutilTypeForcesPrixCas d'usage
InformaticaETLEntreprise, 1000+ connecteurs$$$$ (100K+/an)Grands groupes, legacy
TalendETL/ELTOpen-source + enterprise$$ - $$$$Mid-market
SSISETLIntegre a SQL Server$ (licence SQL)Ecosysteme Microsoft
FivetranEL (Extract-Load)300+ connecteurs managees$$ - $$$SaaS extraction
AirbyteELOpen-source, 400+ connecteursGratuit - $$Startups, self-hosted
dbtT (Transform)SQL versionne, tests, docsGratuit - $$Transformation in-warehouse
Apache SparkETL/ELTBig data, ML integreGratuit (compute)Data engineering avance
AWS GlueETL/ELTServerless, integre AWSPay-per-useEcosysteme AWS
Azure Data FactoryETL/ELTOrchestrateur hybridPay-per-useEcosysteme Azure
Google DataformTIntegre BigQueryInclus BigQueryEcosysteme GCP

Migration ETL vers ELT chez Deliveroo : 10x plus rapide

Contexte : Deliveroo, plateforme de livraison europeenne, traitait 50M+ d'evenements/jour avec des pipelines ETL Informatica herites de leur expansion rapide.

Probleme :

  • Les jobs ETL prenaient 8-12 heures pour les rafraichissements nocturnes
  • Le serveur ETL saturait regulierement, necessitant des scaling manuels
  • Les analystes attendaient 2-3 semaines pour un nouveau rapport
  • Cout annuel : 800K EUR en licences + infrastructure ETL

Solution :

  • Migration vers Snowflake + Fivetran (extraction) + dbt (transformation)
  • Migration progressive : source par source sur 6 mois
  • Conservation des pipelines ETL critiques pour les donnees PII (hybrid)

Resultats :

  • Temps de rafraichissement : 8h --> 45 min (10x plus rapide)
  • Nouveau rapport en 2 jours au lieu de 2 semaines
  • Cout reduit de 60% (300K EUR/an vs 800K EUR)
  • 150+ modeles dbt maintenus par 12 analytics engineers

ELT sans gouvernance = Data Swamp

Symptomes :

  • La zone "raw" du warehouse contient 500+ tables dont personne ne connait l'usage
  • Des transformations dbt sont creees sans convention de nommage ni documentation
  • Les couts Snowflake explosent car des requetes non optimisees scannent des TB de donnees brutes
  • Aucun lineage : impossible de savoir quelle source alimente quel dashboard
  • Les donnees PII se retrouvent dans des tables accessibles a tous

Solution :

  • Definir des conventions strictes : raw_, stg_, int_, mart_
  • Imposer dbt docs et dbt test dans la CI/CD
  • Mettre en place des row-level security et du column masking
  • Monitorer les couts par equipe et par modele dbt
  • Nommer un "dbt project owner" par domaine metier

Quiz - ETL vs ELT

Quel est l'avantage principal de l'approche ELT par rapport a l'ETL ?

Les transformations sont plus fiables car executees hors du warehouse
La scalabilite est assuree par la puissance de calcul du cloud warehouse
Les donnees PII sont mieux protegees
Les couts sont toujours inferieurs
La scalabilite elastique du cloud warehouse permet de traiter des volumes massifs sans bottleneck de serveur intermediaire.

Dans quel scenario l'ETL traditionnel reste-t-il preferable ?

Quand l'equipe est composee principalement d'analystes SQL
Quand les donnees PII doivent etre masquees avant tout stockage dans le warehouse
Quand le volume de donnees depasse 1 PB
Quand on utilise Snowflake ou BigQuery
L'ETL permet de masquer/tokeniser les donnees sensibles sur un serveur intermediaire avant qu'elles n'atteignent le warehouse, ce qui est crucial pour certaines reglementations.

Quel outil est specialise dans la partie "Transform" de l'ELT ?

Fivetran
Airbyte
dbt (data build tool)
Apache Kafka
dbt est l'outil de reference pour la transformation in-warehouse. Fivetran et Airbyte gerent l'extraction et le chargement (EL).
Quelle est la difference fondamentale entre ETL et ELT ?
Dans l'ETL, les transformations s'executent sur un serveur intermediaire avant le chargement dans le warehouse. Dans l'ELT, les donnees brutes sont chargees directement dans le warehouse, et les transformations s'executent dans celui-ci en exploitant sa puissance de calcul elastique.
Quel est le stack ELT moderne le plus courant ?
Le stack ELT moderne typique : Fivetran ou Airbyte (Extract + Load) + Snowflake ou BigQuery (warehouse) + dbt (Transform) + un orchestrateur comme Airflow ou Dagster. C'est le "Modern Data Stack".

17. Lambda & Kappa Architecture

60 min Avance

Objectifs d'apprentissage

  • Comprendre les 3 couches de l'architecture Lambda
  • Maitriser la simplification proposee par l'architecture Kappa
  • Savoir quand choisir Lambda vs Kappa selon les contraintes
  • Identifier les anti-patterns courants dans les architectures hybrides batch/streaming
  • Concevoir un systeme combinant batch et temps reel

Le probleme : Batch vs Real-time

Les systemes de donnees doivent souvent servir deux besoins contradictoires :

  • Analyses historiques : Rapports complets et precis sur de grandes periodes (batch)
  • Decisions temps reel : Dashboards live, alertes, recommendations instantanees (streaming)

Comment reconcilier ces deux mondes ? Nathan Marz (createur de Apache Storm) a propose en 2011 l'Architecture Lambda, une approche qui combine le meilleur des deux mondes.

Le theoreme de CAP applique au data processing

En traitement de donnees, il est difficile d'obtenir simultanement : completude (toutes les donnees), fraicheur (temps reel) et simplicite (un seul systeme). Lambda sacrifie la simplicite pour obtenir completude + fraicheur.

Architecture Lambda : Les 3 couches

1. Batch Layer (couche batch)

La couche batch est la "source de verite". Elle traite toutes les donnees historiques en mode batch (typiquement toutes les heures ou toutes les nuits) pour produire des "batch views" - des vues precalculees et completes.

  • Technologie : Hadoop MapReduce, Apache Spark Batch, Hive
  • Donnees : Dataset complet, immutable, append-only
  • Latence : Heures (temps de retraitement complet)
  • Avantage : Resultats exacts et complets

2. Speed Layer (couche temps reel)

La couche speed compense la latence du batch en traitant uniquement les donnees recentes (depuis le dernier batch) en temps reel. Elle produit des "realtime views" qui sont des approximations incrementales.

  • Technologie : Apache Storm, Kafka Streams, Flink, Spark Structured Streaming
  • Donnees : Flux d'evenements recents uniquement
  • Latence : Secondes a millisecondes
  • Avantage : Resultats immediats (mais potentiellement approximatifs)

3. Serving Layer (couche de service)

La serving layer fusionne les resultats des deux couches precedentes pour servir les requetes des utilisateurs finaux. Elle combine les batch views (completes mais pas a jour) avec les realtime views (a jour mais incrementales).

  • Technologie : Druid, ClickHouse, Cassandra, ElasticSearch
  • Fonction : Merge des vues batch + realtime
  • Latence requete : Millisecondes
Architecture Lambda - Les 3 couches
                    +------------------------------------------+
                    |            BATCH LAYER                    |
  +----------+     |  Hadoop / Spark Batch                     |
  |          |     |                                           |
  | Sources  |     |  Toutes les donnees --> Batch Views       |
  | de       |---->|  (retraitement complet periodique)        |
  | donnees  |     |                           |               |
  |          |     +---------------------------|---------------+
  | - Events |                                 |
  | - Logs   |                                 v
  | - DB CDC |     +------------------------------------------+
  | - APIs   |     |           SERVING LAYER                   |
  |          |     |                                           |
  +----+-----+     |  Batch Views + Realtime Views = Resultat  |
       |           |                                           |
       |           |  Druid / ClickHouse / Cassandra           |
       |           +------------------------------------------+
       |                                       ^
       |           +---------------------------|---------------+
       |           |           SPEED LAYER                     |
       +---------->|  Kafka Streams / Flink / Storm            |
                   |                                           |
                   |  Donnees recentes --> Realtime Views       |
                   |  (incremental, depuis dernier batch)       |
                   +------------------------------------------+

  Requete utilisateur = merge(batch_view, realtime_view)
  Apres chaque batch run : realtime_view est "resetee"

Architecture Kappa : La simplification

En 2014, Jay Kreps (co-createur de Apache Kafka, CEO de Confluent) propose l'Architecture Kappa : "Pourquoi maintenir deux systemes quand le streaming peut tout faire ?"

Principe

Kappa elimine la couche batch. Tout est traite comme un flux (stream). Le retraitement historique se fait en "rejouant" le log d'evenements (Kafka) dans le meme pipeline streaming.

Architecture Kappa - Stream uniquement
  +----------+     +------------------------------------------+
  |          |     |           STREAM LAYER                    |
  | Sources  |     |                                           |
  | de       |---->|  Kafka (log immutable) --> Flink/KStreams |
  | donnees  |     |                                           |
  |          |     |  Meme pipeline pour:                      |
  | - Events |     |    - Traitement temps reel                |
  | - Logs   |     |    - Retraitement historique (replay)     |
  | - DB CDC |     |                                           |
  +----------+     +---------------------|---------------------+
                                         |
                                         v
                   +------------------------------------------+
                   |          SERVING LAYER                    |
                   |                                           |
                   |  Vues materialisees, indexes              |
                   |  ClickHouse / Druid / Elasticsearch       |
                   +------------------------------------------+

  Retraitement = deployer nouvelle version du consumer
                  + rejouer le log Kafka depuis le debut
                  + basculer vers la nouvelle sortie

Avantages de Kappa

  • Un seul codebase : Pas de duplication batch/streaming
  • Simplicite operationnelle : Un seul systeme a maintenir et monitorer
  • Coherence garantie : Le meme code produit les memes resultats
  • Deploy plus rapide : Une seule pipeline a mettre a jour

Limites de Kappa

  • Replay couteux : Rejouer des annees de logs peut prendre des jours
  • Stockage Kafka : Conserver tout l'historique dans Kafka coute cher
  • Complexite streaming : Certaines analyses sont plus simples en batch SQL
  • Exactitude : Les fenetres temporelles streaming peuvent causer des approximations

Comparaison Lambda vs Kappa

Lambda Architecture

  • Complexite : Elevee (2 codebases)
  • Exactitude : Garantie par le batch
  • Retraitement : Batch naturel
  • Cout infra : Plus eleve (2 systemes)
  • Cas d'usage : Systemes critiques ou l'exactitude prime
  • Exemples : Finance, healthcare, reporting reglementaire
  • Technologies : Spark + Kafka + Serving DB

Kappa Architecture

  • Complexite : Moderee (1 codebase)
  • Exactitude : Depend du replay
  • Retraitement : Replay du log
  • Cout infra : Optimise (1 systeme)
  • Cas d'usage : Event-driven, IoT, temps reel natif
  • Exemples : Recommandation, fraude, IoT
  • Technologies : Kafka + Flink + Serving DB

Tendance 2024-2025 : Convergence

Les outils modernes (Apache Flink, Databricks Delta Live Tables, Apache Beam) effacent la frontiere entre batch et streaming. Apache Beam permet d'ecrire un seul pipeline executables en batch OU streaming. Databricks Structured Streaming traite les micro-batches comme du streaming. La distinction Lambda/Kappa devient moins pertinente.

LinkedIn : Lambda Architecture pour le feed

Contexte : LinkedIn doit alimenter le fil d'actualite de 900M+ membres avec des contenus personnalises. Le systeme doit combiner des modeles ML entraines sur l'historique (batch) avec les interactions en temps reel (streaming).

Implementation Lambda :

  • Batch Layer : Apache Spark traite les interactions des 30 derniers jours chaque nuit pour recalculer les scores de pertinence et reentrainer les modeles de recommendation
  • Speed Layer : Kafka Streams traite les likes, commentaires et partages en temps reel pour ajuster les scores incrementalement
  • Serving Layer : Un service custom fusionne les scores batch (model offline) + les ajustements realtime pour classer les posts du feed

Chiffres cles :

  • 10M+ evenements/seconde dans la speed layer
  • Batch run nocturne : 500 TB de donnees traites en 4h (Spark sur 2000+ noeuds)
  • Latence feed : < 200ms pour 99% des requetes
  • Le batch corrige les "drifts" du realtime toutes les nuits

Lecon : LinkedIn a progressivement migre des parties vers une approche Kappa avec Apache Samza puis Flink, mais conserve Lambda pour les cas ou l'exactitude batch est critique (analytics, monetisation).

Lambda avec code duplique batch/streaming

Le piege : Implementer la meme logique metier en deux langages/frameworks differents (ex: Spark Scala pour le batch, Kafka Streams Java pour le streaming). Cela mene a :

  • Divergence silencieuse : Un bug corrige dans le batch mais oublie dans le streaming (ou inversement)
  • Double maintenance : Chaque changement metier doit etre implemente et teste deux fois
  • Resultats incoherents : Les batch views et realtime views ne matchent jamais parfaitement
  • Cout RH double : Besoin de specialistes batch ET streaming

Solutions :

  • Apache Beam : Ecrire UN pipeline, l'executer en batch (Spark Runner) ou streaming (Flink Runner)
  • Bibliotheque partagee : Extraire la logique metier dans une lib commune utilisee par les deux layers
  • Kappa : Si possible, migrer vers une architecture Kappa pure pour eliminer la duplication
  • Tests de reconciliation : Automatiser la comparaison batch vs streaming et alerter sur les ecarts
Python - Apache Beam : Un code, deux modes
import apache_beam as beam
from apache_beam.options.pipeline_options import PipelineOptions

def compute_user_metrics(events):
    """Logique metier UNIQUE - utilisee en batch ET streaming"""
    return (
        events
        | 'ParseEvent' >> beam.Map(parse_event)
        | 'FilterValid' >> beam.Filter(is_valid_event)
        | 'KeyByUser' >> beam.Map(lambda e: (e['user_id'], e))
        | 'WindowEvents' >> beam.WindowInto(
            beam.window.FixedWindows(3600)  # fenetres de 1h
        )
        | 'GroupByUser' >> beam.GroupByKey()
        | 'ComputeMetrics' >> beam.Map(calculate_metrics)
        | 'FormatOutput' >> beam.Map(format_for_serving)
    )

# MODE BATCH - Spark Runner
batch_options = PipelineOptions([
    '--runner=SparkRunner',
    '--spark_master_url=spark://master:7077',
    '--input=gs://data/events/2024/**/*.json'
])
with beam.Pipeline(options=batch_options) as p:
    events = p | beam.io.ReadFromText('gs://data/events/')
    compute_user_metrics(events) | beam.io.WriteToBigQuery('batch_views')

# MODE STREAMING - Flink Runner
stream_options = PipelineOptions([
    '--runner=FlinkRunner',
    '--streaming',
    '--flink_master=flink-jobmanager:8081'
])
with beam.Pipeline(options=stream_options) as p:
    events = p | beam.io.ReadFromKafka(
        consumer_config={'bootstrap.servers': 'kafka:9092'},
        topics=['user_events']
    )
    compute_user_metrics(events) | beam.io.WriteToBigQuery('realtime_views')

Quiz - Lambda & Kappa

Quelle couche de l'architecture Lambda garantit l'exactitude des resultats ?

Speed Layer
Batch Layer
Serving Layer
Toutes les couches egalement
La Batch Layer retraite toutes les donnees historiques periodiquement, ce qui garantit des resultats complets et exacts. La Speed Layer ne fournit que des approximations incrementales.

Quel est le principal avantage de l'architecture Kappa par rapport a Lambda ?

Meilleure exactitude des resultats
Un seul codebase a maintenir au lieu de deux
Latence toujours inferieure
Aucun besoin de Kafka
Kappa elimine la duplication de code entre batch et streaming en traitant tout comme un flux. Un seul pipeline a developper, tester et maintenir.

Comment l'architecture Kappa gere-t-elle le retraitement historique ?

Elle lance un job batch Spark
Elle rejoue le log Kafka depuis le debut avec un nouveau consumer
Elle ne peut pas retraiter l'historique
Elle utilise une base de donnees temporelle
Dans Kappa, le retraitement consiste a deployer une nouvelle version du consumer et a rejouer le log Kafka (immutable) depuis le debut, produisant une nouvelle sortie. On bascule ensuite vers cette nouvelle sortie.

18. Medallion Architecture

60 min Avance

Objectifs d'apprentissage

  • Maitriser les 3 couches Bronze, Silver et Gold de l'architecture Medallion
  • Comprendre les patterns de transformation entre chaque couche
  • Implementer des pipelines Medallion avec Delta Lake ou Iceberg
  • Definir des SLA et des contrats de qualite pour chaque couche
  • Eviter les anti-patterns courants de la Medallion Architecture

Origine et philosophie

L'architecture Medallion (aussi appelee "Multi-hop architecture") a ete popularisee par Databricks avec Delta Lake. Elle organise les donnees d'un lakehouse en trois couches de qualite croissante, chacune servant un objectif precis.

Le principe fondamental

Les donnees progressent a travers des couches de raffinement successives, comme un metal precieux passe du minerai brut (Bronze) a l'alliage purifie (Silver) puis au produit fini (Gold). Chaque couche ajoute de la valeur par nettoyage, enrichissement et aggregation.

Cette architecture resout un probleme cle : comment organiser un data lakehouse pour que les donnees soient a la fois preservees dans leur forme brute ET exploitables par les metiers ?

Les 3 couches en detail

Medallion Architecture - Bronze / Silver / Gold
  SOURCES                BRONZE              SILVER               GOLD
  ======                 ======              ======               ====
                     (Raw / Landing)     (Cleaned/Conformed)  (Business-Ready)

  +----------+      +---------------+    +----------------+   +---------------+
  | ERP/SAP  |----->|               |    |                |   |               |
  +----------+      | Donnees BRUTES|    | Donnees PROPRES|   | Donnees       |
  +----------+      |               |    |                |   | AGGREGEES     |
  | CRM      |----->| - Pas de      |--->| - Dedupliquees |->>|               |
  +----------+      |   transformation   | - Typees       |   | - KPIs        |
  +----------+      | - Schema-on-  |    | - Validees     |   | - Dimensions  |
  | APIs     |----->|   read        |    | - Jointes      |   | - Faits       |
  +----------+      | - Append-only |    | - Normalisees  |   | - Agregats    |
  +----------+      | - Metadata    |    | - Historisees   |   | - ML features |
  | IoT/Logs |----->|   tracking    |    |   (SCD Type 2) |   |               |
  +----------+      +---------------+    +----------------+   +---------------+

  Qualite:    0%         ~30%                 ~85%                 ~99%
  Latence:    -          Minutes              Heures               Heures/Jours
  Acces:      -          Data Engineers       Analytics Eng.       Business Users
  Format:     Varies     Delta/Iceberg        Delta/Iceberg        Delta/Iceberg
  Retention:  -          Illimitee            3-7 ans              1-3 ans

  Transformation:        Ingestion            Nettoyage            Aggregation
                         (Fivetran/Airbyte)   (dbt/Spark)          (dbt/Spark)

Bronze Layer (Raw / Landing Zone)

La couche Bronze est le miroir fidele des sources. Les donnees arrivent telles quelles, sans aucune transformation metier. C'est la "zone d'atterrissage".

Regles de la couche Bronze

  • Aucune transformation metier : Les donnees sont brutes
  • Append-only : On n'ecrase jamais, on ajoute toujours
  • Metadata enrichie : Timestamp d'ingestion, source, batch ID
  • Schema-on-read : Le schema est flexible, evolution libre
  • Retention illimitee : Les donnees brutes sont conservees pour replay
Python - Ingestion Bronze avec Delta Lake
from pyspark.sql import SparkSession
from pyspark.sql.functions import current_timestamp, lit, input_file_name
from delta.tables import DeltaTable

spark = SparkSession.builder \
    .appName("Bronze Ingestion") \
    .config("spark.sql.extensions",
            "io.delta.sql.DeltaSparkSessionExtension") \
    .getOrCreate()

# ========================================
# BRONZE: Ingestion brute depuis les sources
# ========================================
def ingest_to_bronze(source_path, bronze_table, source_name):
    """Charge les donnees brutes dans la couche Bronze"""

    # Lecture des donnees brutes (JSON, CSV, Parquet...)
    raw_df = spark.read \
        .option("mergeSchema", "true") \
        .json(source_path)

    # Ajout des metadata d'ingestion
    bronze_df = raw_df \
        .withColumn("_bronze_loaded_at", current_timestamp()) \
        .withColumn("_bronze_source", lit(source_name)) \
        .withColumn("_bronze_file", input_file_name()) \
        .withColumn("_bronze_batch_id", lit(get_batch_id()))

    # Ecriture append-only dans Delta Lake
    bronze_df.write \
        .format("delta") \
        .mode("append") \
        .option("mergeSchema", "true") \
        .saveAsTable(f"bronze.{bronze_table}")

    print(f"Bronze: {bronze_df.count()} rows ingested into {bronze_table}")

# Exemples d'ingestion
ingest_to_bronze("s3://raw/orders/2024-01-15/", "orders", "ERP_SAP")
ingest_to_bronze("s3://raw/customers/", "customers", "CRM_Salesforce")
ingest_to_bronze("s3://raw/events/", "clickstream", "Web_Analytics")

Bonnes pratiques Bronze

Activez Delta Lake Time Travel pour pouvoir remonter dans le temps. Utilisez OPTIMIZE et Z-ORDER periodiquement pour les performances de lecture. Ajoutez toujours _bronze_loaded_at pour le lineage.

Silver Layer (Cleaned / Conformed)

La couche Silver est le coeur qualitatif du lakehouse. C'est ici que les donnees sont nettoyees, validees, dedupliquees et conformees a un modele commun.

Transformations typiques Bronze vers Silver

  • Deduplication : Suppression des doublons base sur une cle metier
  • Typage : Cast des strings en types corrects (dates, nombres)
  • Validation : Rejet ou quarantaine des lignes invalides
  • Standardisation : Formats de dates, devises, codes pays uniformises
  • Jointures : Enrichissement avec les donnees de reference
  • SCD Type 2 : Historisation des changements lents
  • PII handling : Masquage ou tokenisation des donnees sensibles
SQL - Transformation Bronze vers Silver (dbt)
-- models/silver/slv_orders.sql
-- Transformation Bronze β†’ Silver pour les commandes

{{
    config(
        materialized='incremental',
        unique_key='order_id',
        incremental_strategy='merge',
        file_format='delta',
        schema='silver'
    )
}}

WITH bronze_orders AS (
    SELECT
        *,
        ROW_NUMBER() OVER (
            PARTITION BY id
            ORDER BY _bronze_loaded_at DESC
        ) AS _row_rank
    FROM {{ source('bronze', 'orders') }}
    {% if is_incremental() %}
    WHERE _bronze_loaded_at > (
        SELECT MAX(_silver_loaded_at) FROM {{ this }}
    )
    {% endif %}
),

-- Deduplication : garder la version la plus recente
deduplicated AS (
    SELECT * FROM bronze_orders WHERE _row_rank = 1
),

-- Nettoyage et typage
cleaned AS (
    SELECT
        -- Cle metier
        CAST(id AS BIGINT) AS order_id,

        -- Nettoyage client
        CAST(customer_id AS BIGINT) AS customer_id,
        TRIM(LOWER(customer_email)) AS customer_email,

        -- Typage des dates
        TRY_CAST(order_date AS TIMESTAMP) AS order_date,
        TRY_CAST(shipped_date AS TIMESTAMP) AS shipped_date,

        -- Montants
        ROUND(CAST(amount AS DECIMAL(12,2)), 2) AS order_amount,
        UPPER(TRIM(COALESCE(currency, 'EUR'))) AS currency,

        -- Standardisation des statuts
        CASE
            WHEN LOWER(status) IN ('cancelled','canceled','annule')
                THEN 'CANCELLED'
            WHEN LOWER(status) IN ('completed','done','livre')
                THEN 'COMPLETED'
            WHEN LOWER(status) IN ('shipped','expedie','en_transit')
                THEN 'SHIPPED'
            WHEN LOWER(status) IN ('pending','en_attente','new')
                THEN 'PENDING'
            ELSE 'UNKNOWN'
        END AS order_status,

        -- Metadata
        _bronze_loaded_at,
        _bronze_source,
        CURRENT_TIMESTAMP() AS _silver_loaded_at

    FROM deduplicated
    WHERE id IS NOT NULL
      AND TRY_CAST(amount AS DECIMAL(12,2)) IS NOT NULL
      AND TRY_CAST(order_date AS TIMESTAMP) IS NOT NULL
),

-- Validation metier
validated AS (
    SELECT
        *,
        CASE
            WHEN order_amount <= 0 THEN 'INVALID_AMOUNT'
            WHEN order_date > CURRENT_DATE() THEN 'FUTURE_DATE'
            WHEN customer_id IS NULL THEN 'MISSING_CUSTOMER'
            ELSE 'VALID'
        END AS _validation_status
    FROM cleaned
)

SELECT * FROM validated
-- On garde les lignes invalides mais flaggees pour audit

Gold Layer (Business-Ready / Curated)

La couche Gold contient les donnees pretes a la consommation metier. Ce sont des modeles dimensionnels, des KPIs agreges, des feature stores pour le ML, et des vues optimisees pour les dashboards.

Types de tables Gold

  • Dimensions : dim_customer, dim_product, dim_date
  • Faits : fact_orders, fact_sessions, fact_revenue
  • Agregats : agg_daily_sales, agg_monthly_churn
  • Features ML : feature_customer_360, feature_product_affinity
  • Reporting : rpt_executive_dashboard, rpt_weekly_kpis
SQL - Transformation Silver vers Gold (dbt)
-- models/gold/gold_daily_revenue.sql
-- Gold layer: KPI quotidien de revenu par pays et categorie

{{
    config(
        materialized='table',
        file_format='delta',
        schema='gold',
        tags=['daily', 'finance', 'executive']
    )
}}

WITH orders AS (
    SELECT * FROM {{ ref('slv_orders') }}
    WHERE _validation_status = 'VALID'
      AND order_status = 'COMPLETED'
),

customers AS (
    SELECT * FROM {{ ref('slv_customers') }}
),

products AS (
    SELECT * FROM {{ ref('slv_products') }}
),

order_lines AS (
    SELECT * FROM {{ ref('slv_order_lines') }}
),

-- Jointure enrichie
enriched AS (
    SELECT
        o.order_id,
        o.order_date,
        c.country AS customer_country,
        c.segment AS customer_segment,
        p.category AS product_category,
        p.brand AS product_brand,
        ol.quantity,
        ol.unit_price,
        ol.quantity * ol.unit_price AS line_revenue,
        o.currency
    FROM orders o
    INNER JOIN customers c ON o.customer_id = c.customer_id
    INNER JOIN order_lines ol ON o.order_id = ol.order_id
    INNER JOIN products p ON ol.product_id = p.product_id
),

-- Aggregation Gold
daily_revenue AS (
    SELECT
        DATE_TRUNC('day', order_date) AS revenue_date,
        customer_country,
        customer_segment,
        product_category,
        COUNT(DISTINCT order_id) AS total_orders,
        SUM(quantity) AS total_items_sold,
        SUM(line_revenue) AS gross_revenue,
        AVG(line_revenue) AS avg_order_value,
        COUNT(DISTINCT customer_country) AS countries_served,
        CURRENT_TIMESTAMP() AS _gold_refreshed_at
    FROM enriched
    GROUP BY 1, 2, 3, 4
)

SELECT * FROM daily_revenue

-- Ce modele Gold est directement consomme par:
-- - Le dashboard Tableau "Executive Revenue"
-- - L'API interne /api/v2/revenue
-- - Le rapport hebdomadaire CFO

Exemples de donnees a chaque couche

Exemple concret : une commande e-commerce traversant les 3 couches

Suivons une commande depuis son ingestion brute jusqu'a son exploitation par le metier :

JSON - Donnee brute entrant en Bronze
// Bronze: Donnee brute telle que recue de l'API
{
  "id": "ord_20240115_78432",
  "cust_id": "C-9912",
  "cust_email": " Marie.Dupont@Gmail.COM ",
  "date": "2024-01-15T14:22:33+01:00",
  "shipped": null,
  "amt": "149.99",           // String au lieu de number!
  "currency": "eur",         // Minuscule, pas standardise
  "status": "termine",       // Terme francais, pas normalise
  "items": [
    {"sku": "SKU-A1234", "qty": "2", "price": "49.99"},
    {"sku": "SKU-B5678", "qty": "1", "price": "50.01"}
  ],
  "_bronze_loaded_at": "2024-01-15T13:25:00Z",
  "_bronze_source": "ERP_API_v2"
}
JSON - Donnee nettoyee en Silver
// Silver: Donnee nettoyee, typee, standardisee
{
  "order_id": 78432,
  "customer_id": 9912,
  "customer_email": "marie.dupont@gmail.com",   // Trim + lowercase
  "order_date": "2024-01-15T14:22:33",          // ISO format
  "shipped_date": null,
  "order_amount": 149.99,                        // DECIMAL
  "currency": "EUR",                             // Uppercase standard
  "order_status": "COMPLETED",                   // Normalise
  "_validation_status": "VALID",
  "_bronze_loaded_at": "2024-01-15T13:25:00Z",
  "_silver_loaded_at": "2024-01-15T14:00:00Z"
}
JSON - Donnee aggregee en Gold
// Gold: Aggregation business-ready
{
  "revenue_date": "2024-01-15",
  "customer_country": "France",
  "customer_segment": "Premium",
  "product_category": "Electronics",
  "total_orders": 1247,
  "total_items_sold": 3891,
  "gross_revenue": 298450.67,
  "avg_order_value": 239.33,
  "_gold_refreshed_at": "2024-01-16T06:00:00Z"
}

Databricks : Medallion chez Shell pour l'IoT

Contexte : Shell, geant petrolier, opere 25,000+ puits de petrole et installations industrielles. Chaque installation genere des millions d'evenements IoT par jour (capteurs de temperature, pression, vibrations, debit).

Challenge : Traiter 1.5 TB/jour de donnees IoT brutes pour alimenter la maintenance predictive et l'optimisation de production en temps quasi-reel.

Implementation Medallion sur Databricks :

  • Bronze : Ingestion streaming via Kafka + Auto Loader. Donnees brutes IoT en Delta Lake partitionnees par site_id/year/month/day. Retention : illimitee (500+ TB historique)
  • Silver : Delta Live Tables pour le nettoyage incremental. Deduplication des capteurs, interpolation des valeurs manquantes, detection des outliers (3-sigma), jointure avec le referentiel equipement. Latence : 5 minutes
  • Gold : Agregats horaires par equipement, features pour les modeles ML de maintenance predictive, dashboards operationnels temps reel pour les superviseurs

Resultats :

  • Temps de detection d'anomalie : 2 jours --> 15 minutes
  • Reduction de 30% des arrets non planifies
  • Economie estimee : 200M$/an en maintenance predictive
  • 10+ modeles ML en production alimentes par la Gold layer

Gold Layer sans SLA definis

Le piege : La Gold layer est creee mais sans contrats de service clairs. Les metiers ne savent pas quand les donnees sont fraiches, ni quelle est leur qualite garantie.

Symptomes :

  • Le dashboard CFO affiche des donnees de la veille a 14h car le pipeline Gold n'a pas de SLA matinal
  • Les data scientists entrainent des modeles sur des features Gold sans savoir si elles sont completes
  • Deux equipes creent des KPIs "revenue" differents dans la Gold layer sans reconciliation
  • Pas d'alerting quand la Gold layer n'est pas rafraichie

Solution : Definir un contrat Gold explicite :

  • Fraicheur : "gold_daily_revenue est rafraichi avant 6h UTC chaque jour"
  • Completude : "99.5% des commandes COMPLETED sont presentes"
  • Qualite : "0 NULL dans les colonnes critiques (revenue, country)"
  • Ownership : "Equipe Finance possede cette table, SLA garanti"
  • Alerting : PagerDuty/Slack si SLA non respecte

Scenario : Choisir la granularite de vos couches

Vous etes Data Architect chez un e-retailer. Le CTO demande : "Faut-il une couche supplementaire entre Silver et Gold ?"

Arguments pour une couche "Platinum" ou "Silver+" :

  • Les jointures Silver sont complexes et partagees entre plusieurs Gold tables
  • Certaines equipes ont besoin de donnees propres mais non aggregees
  • Les features ML sont a mi-chemin entre Silver (granulaire) et Gold (agrege)

Votre recommandation :

Plutot que d'ajouter une couche, utilisez des modeles intermediaires dans dbt (int_ prefix) qui restent dans le namespace Silver mais servent de "building blocks" pour le Gold. Cela garde la simplicite 3 couches tout en factorisant la logique commune.

Quiz - Medallion Architecture

Quelle couche de l'architecture Medallion contient les donnees brutes non transformees ?

Gold
Silver
Bronze
Platinum
La couche Bronze est la zone d'atterrissage (landing zone) ou les donnees arrivent brutes, sans transformation, en mode append-only.

Quelle transformation est typiquement effectuee dans la couche Silver ?

Aggregation de KPIs par jour
Deduplication et standardisation des formats
Creation de dashboards
Ingestion depuis les sources
La couche Silver est responsable du nettoyage : deduplication, typage, standardisation des formats, validation metier et jointures avec les referentiels.

Pourquoi la couche Bronze doit-elle etre "append-only" ?

Pour economiser de l'espace disque
Pour ameliorer les performances de lecture
Pour preserver les donnees brutes et permettre le retraitement
Ce n'est pas necessaire
Le mode append-only garantit que les donnees brutes originales sont toujours disponibles. En cas d'erreur de transformation Silver/Gold, on peut tout rejouer depuis le Bronze.

19. Data Mesh

75 min Avance

Objectifs d'apprentissage

  • Comprendre les 4 principes fondamentaux du Data Mesh
  • Differencier le Data Mesh des architectures centralisees (Data Lake, DWH)
  • Evaluer la maturite organisationnelle necessaire pour adopter le Data Mesh
  • Identifier les pre-requis et les risques d'une adoption prematuree
  • Concevoir une strategie de migration progressive vers le Data Mesh

Origine : Le probleme des architectures centralisees

En 2019, Zhamak Dehghani (alors chez ThoughtWorks) publie un article fondateur : "How to Move Beyond a Monolithic Data Lake to a Distributed Data Mesh". Son constat :

  • Les equipes data centralisees deviennent des bottlenecks organisationnels
  • Les data lakes monolithiques accumulent des donnees que personne ne comprend
  • L'equipe data centrale ne comprend pas le contexte metier de chaque domaine
  • Les pipelines deviennent fragiles car une seule equipe gere tout

Data Mesh n'est pas une technologie

Le Data Mesh est un paradigme organisationnel et architectural, pas un outil ou une plateforme. Il s'inspire des principes du Domain-Driven Design (DDD) et des microservices, appliques au monde des donnees.

Les 4 principes fondamentaux

Data Mesh - Les 4 piliers
  +--------------------------------------------------------------------+
  |                    DATA MESH - 4 PRINCIPES                         |
  +--------------------------------------------------------------------+
  |                                                                    |
  |  1. DOMAIN OWNERSHIP            2. DATA AS A PRODUCT              |
  |  ===================            ====================              |
  |  Chaque domaine metier          Les donnees sont traitees          |
  |  possede et gere SES            comme un PRODUIT avec:             |
  |  donnees de bout en bout        - SLA, qualite, docs              |
  |                                 - Interface decouvrable            |
  |  +-------+  +--------+         - User experience                  |
  |  |Ventes |  |Logist. |         - Ownership clair                  |
  |  |Domain |  |Domain  |                                            |
  |  |Owner  |  |Owner   |         [Producteur] --> [Consommateur]    |
  |  +-------+  +--------+                                            |
  |                                                                    |
  |  3. SELF-SERVE PLATFORM         4. FEDERATED GOVERNANCE           |
  |  ======================         =======================           |
  |  Une plateforme interne          Gouvernance decentralisee         |
  |  qui permet aux domaines         avec des standards globaux:       |
  |  de publier/consommer            - Conventions de nommage          |
  |  des data products SANS          - Qualite minimale               |
  |  dependre d'une equipe           - Interoperabilite               |
  |  plateforme centrale             - Securite/compliance            |
  |                                                                    |
  |  [Domain] --API--> [Platform]   Global Rules + Local Autonomy     |
  +--------------------------------------------------------------------+

Principe 1 : Domain Ownership (Propriete par domaine)

Chaque domaine metier (ventes, marketing, logistique, finance...) est responsable de ses propres donnees, de la source jusqu'a la mise a disposition.

Concretement

  • L'equipe "Commandes" gere le pipeline de donnees des commandes de A a Z
  • Chaque domaine a ses propres data engineers (ou analytics engineers)
  • Le domaine definit son propre schema, ses regles de qualite, sa latence
  • Fini le ticket "data team, peux-tu creer un pipeline pour moi ?"

Avant (Centralise)

  • 1 equipe data pour toute l'entreprise
  • File d'attente de 3-6 mois pour un nouveau pipeline
  • L'equipe data ne comprend pas le contexte metier
  • Pipelines fragiles et mal documentes

Apres (Data Mesh)

  • Chaque domaine a son propre "data team"
  • Nouveau pipeline en semaines
  • Les experts metier gerent leurs propres donnees
  • Pipelines robustes car concus par ceux qui comprennent

Principe 2 : Data as a Product

Les donnees partagees entre domaines sont traitees comme des produits avec la meme rigueur qu'un produit logiciel.

Caracteristiques d'un Data Product

CaracteristiqueDescriptionExemple
DecouvrabiliteFacile a trouver dans un catalogueReference dans le data catalog
AdressabiliteAccessible via une interface standardAPI, table partagee, event stream
FiabiliteSLA de disponibilite et fraicheur"Rafraichi avant 6h, 99.9% uptime"
InteroperabiliteCompatible avec les autres data productsSchemas standardises, identifiants communs
SecuriteControle d'acces et complianceRBAC, masquage PII, audit logs
DocumentationDescription, schema, exemplesData contract YAML, README
QualiteMetriques de qualite mesureesCompletude > 99%, 0 doublons
YAML - Data Contract d'un Data Product
# data-products/orders/datacontract.yaml
apiVersion: datacontract/v1
kind: DataProduct
metadata:
  name: dp-orders
  domain: commerce
  owner: team-commerce@company.com
  tier: tier-1  # Critique business

spec:
  description: |
    Commandes validees et enrichies du domaine Commerce.
    Source de verite pour toute analyse liee aux ventes.

  schema:
    type: delta_table
    location: s3://data-products/commerce/orders/
    fields:
      - name: order_id
        type: bigint
        description: Identifiant unique de la commande
        constraints: [not_null, unique]
      - name: customer_id
        type: bigint
        description: FK vers le data product dp-customers
      - name: order_date
        type: timestamp
        description: Date et heure de la commande (UTC)
      - name: total_amount
        type: decimal(12,2)
        constraints: [not_null, positive]
      - name: status
        type: string
        enum: [PENDING, SHIPPED, COMPLETED, CANCELLED]

  sla:
    freshness: "< 1 hour"
    availability: "99.9%"
    completeness: "> 99.5%"
    refresh_schedule: "every 30 minutes"

  quality:
    tests:
      - unique: order_id
      - not_null: [order_id, customer_id, order_date, total_amount]
      - accepted_values:
          column: status
          values: [PENDING, SHIPPED, COMPLETED, CANCELLED]
      - relationship:
          column: customer_id
          to: dp-customers.customer_id

  access:
    classification: confidential
    pii_columns: []  # PII masquee dans ce product
    consumers:
      - team-finance (read)
      - team-marketing (read, filtered)
      - team-analytics (read)

Principe 3 : Self-Serve Data Platform

Pour que les domaines puissent gerer leurs data products de maniere autonome, il faut une plateforme interne qui abstrait la complexite technique.

Composants de la plateforme

  • Infrastructure as Code : Templates pour creer un data product (storage, compute, monitoring)
  • Data Catalog : Registre central de tous les data products
  • CI/CD Data : Pipeline de deploiement automatise pour les transformations
  • Monitoring : Dashboards de qualite, fraicheur et usage par data product
  • Access Management : RBAC automatise, demande d'acces en self-service
  • Schema Registry : Gestion des versions et compatibilite des schemas
Self-Serve Platform - Architecture
  +--------------------------------------------------------------+
  |                SELF-SERVE DATA PLATFORM                       |
  +--------------------------------------------------------------+
  |                                                               |
  |  +------------------+  +------------------+  +-------------+  |
  |  | Data Product     |  | Observability    |  | Access      |  |
  |  | Templates        |  |                  |  | Manager     |  |
  |  |                  |  | - Quality score  |  |             |  |
  |  | $ mesh create \  |  | - Freshness      |  | - RBAC      |  |
  |  |   --domain sales |  | - Usage metrics  |  | - Self-svc  |  |
  |  |   --type batch   |  | - SLA breaches   |  | - Audit     |  |
  |  +------------------+  +------------------+  +-------------+  |
  |                                                               |
  |  +------------------+  +------------------+  +-------------+  |
  |  | Data Catalog     |  | CI/CD Pipeline   |  | Schema      |  |
  |  |                  |  |                  |  | Registry    |  |
  |  | - Discover       |  | - Test           |  |             |  |
  |  | - Lineage        |  | - Deploy         |  | - Versions  |  |
  |  | - Search         |  | - Rollback       |  | - Compat.   |  |
  |  +------------------+  +------------------+  +-------------+  |
  |                                                               |
  +--------------------------------------------------------------+
  |              Infrastructure (Kubernetes, Cloud, Lakehouse)     |
  +--------------------------------------------------------------+

  Domaine Ventes     Domaine Marketing    Domaine Finance
  +-----------+      +-----------+        +-----------+
  | dp-orders |      | dp-campaigns|      | dp-revenue|
  | dp-returns|      | dp-segments |      | dp-costs  |
  +-----------+      +-----------+        +-----------+

Principe 4 : Federated Computational Governance

La gouvernance est decentralisee dans l'execution mais centralisee dans les standards. Chaque domaine a la liberte d'implementer, mais doit respecter les regles globales.

Standards globaux (non negociables)

  • Nommage : Convention dp-{domain}-{product}
  • Identifiants : Customer_id global unique across products
  • Format : Delta Lake ou Apache Iceberg obligatoire
  • Qualite minimale : Tests not_null, unique sur les cles obligatoires
  • Documentation : Data contract YAML obligatoire pour publier
  • Securite : Classification des donnees obligatoire (public/internal/confidential/restricted)

Autonomie locale (libre au domaine)

  • Choix des outils de transformation (dbt, Spark, Python)
  • Frequence de rafraichissement (selon leur SLA)
  • Schema interne du data product
  • Organisation de l'equipe

Le Data Mesh est souvent mal compris. Ce n'est PAS "chaque equipe fait ce qu'elle veut". C'est plutot comme le federalisme : des lois nationales (standards globaux) + des lois locales (autonomie du domaine). Sans les standards, c'est le chaos. Sans l'autonomie, c'est le monolithe centralise.

Matrice de maturite : Etes-vous pret pour le Data Mesh ?

DimensionNiveau 1 (Pas pret)Niveau 2 (En chemin)Niveau 3 (Pret)
OrganisationEquipe data unique et centraliseeQuelques data engineers dans les domainesChaque domaine a une equipe data autonome
Culture"Les donnees c'est le probleme de la data team"Les domaines s'interessent a leurs donneesLes domaines traitent les donnees comme un produit
PlateformeInfrastructure artisanale, cas par casQuelques outils partages (catalog, CI/CD)Plateforme self-serve mature
GouvernancePas de standards, chacun fait sa sauceQuelques conventions documenteesStandards automatises et respectes
Taille< 50 personnes data/tech50-200 personnes200+ personnes, 5+ domaines data
Data literacySeuls les data analysts comprennent les donneesLes PO comprennent leurs metriquesLes equipes produit sont data-driven

Prerequis minimum

Ne tentez PAS le Data Mesh si : votre entreprise a moins de 5 domaines de donnees distincts, vous avez moins de 50 personnes dans la data/tech, ou votre culture n'est pas encore data-driven. Le Data Mesh a un cout organisationnel eleve qui ne se justifie qu'a grande echelle.

Zalando : Pionnier du Data Mesh en Europe

Contexte : Zalando, leader europeen du e-commerce mode (50M+ clients actifs, 15B EUR de GMV), a ete l'un des premiers adoptants du Data Mesh en Europe a partir de 2020.

Motivation :

  • L'equipe data centralisee (60 personnes) ne pouvait plus servir 200+ equipes produit
  • Le data lake central AWS etait devenu un "data swamp" de 30 PB
  • Temps moyen pour un nouveau pipeline : 4-6 mois

Implementation :

  • 12 domaines identifies : Catalog, Orders, Payments, Logistics, Marketing, etc.
  • Data Product Registry : Catalogue interne avec 200+ data products publies
  • Platform team de 15 personnes fournissant les outils self-serve
  • Standards globaux : Data contracts en Protobuf, quality gates automatisees
  • Migration progressive sur 18 mois, domaine par domaine

Resultats (apres 2 ans) :

  • Temps pour un nouveau data product : 4-6 mois --> 2-3 semaines
  • Nombre de data products : de 20 (equipe centrale) a 200+ (domaines)
  • Satisfaction interne des consommateurs : +65% (NPS survey)
  • L'equipe data centrale est devenue une "platform team" focalisee sur les outils

Data Mesh trop tot : chaos chez une startup

Contexte : Une startup fintech de 80 personnes (dont 15 en data/tech) decide d'adopter le Data Mesh apres que le CTO ait lu l'article de Zhamak Dehghani.

Ce qui s'est passe :

  • Mois 1-3 : Enthousiasme. Chaque equipe (5 au total) est designee "domain owner". Chacune cree son propre pipeline avec les outils de son choix (equipe A en Python, equipe B en dbt, equipe C en Spark)
  • Mois 4-6 : Problemes. Pas de standards, les 5 data products sont incompatibles. Les customer_id ne matchent pas entre domaines. Pas de plateforme self-serve, chaque equipe a reinvente la roue
  • Mois 7-9 : Chaos. Les pipelines tombent en panne sans monitoring unifie. L'equipe Finance ne peut pas reconcilier les chiffres entre les domaines. Cout cloud x3 car chaque equipe a provisionne ses propres clusters
  • Mois 10 : Abandon. Retour a une equipe data centralisee de 5 personnes avec un simple Snowflake + dbt

Lecons :

  • Le Data Mesh necessite une masse critique (5+ vrais domaines, 50+ personnes data)
  • La platform team doit exister AVANT de decentraliser
  • Les standards globaux doivent etre definis AVANT de laisser l'autonomie
  • Le Data Mesh est un investissement long terme (18+ mois) qui ne se justifie pas pour les petites structures

Data Mesh sans Platform Team

Le piege : Decentraliser la propriete des donnees sans fournir une plateforme self-serve. Chaque domaine doit alors construire sa propre infrastructure from scratch.

Consequences :

  • Reinvention de la roue : Chaque equipe cree son propre systeme de monitoring, CI/CD, quality checks
  • Heterogeneite technique : 5 domaines = 5 stacks differents = cauchemar operationnel
  • Cout x5 : Chaque equipe provisionne et maintient ses propres ressources
  • Talent drain : Les data engineers passent 80% du temps sur l'infra au lieu de la valeur metier

Solution :

  • Creer la platform team EN PREMIER (3-5 personnes minimum)
  • Construire les "golden paths" : templates de data product, CI/CD pre-configure, monitoring auto
  • Les domaines consomment la plateforme, pas l'inverse
  • Mesurer le "time to first data product" comme KPI de la plateforme (objectif : < 1 semaine)

Quiz - Data Mesh

Quels sont les 4 principes du Data Mesh ?

Bronze, Silver, Gold, Platinum
Domain Ownership, Data as Product, Self-Serve Platform, Federated Governance
Extract, Transform, Load, Serve
Batch, Speed, Serving, Storage
Les 4 principes fondamentaux du Data Mesh selon Zhamak Dehghani sont : Domain Ownership, Data as a Product, Self-Serve Data Platform, et Federated Computational Governance.

Quel est le prerequis organisationnel le plus important pour adopter le Data Mesh ?

Avoir Snowflake ou Databricks
Avoir une equipe data de plus de 100 personnes
Avoir une platform team et des domaines metier clairement identifies
Avoir migre vers le cloud
Le Data Mesh necessite une platform team fournissant des outils self-serve ET des domaines metier clairement identifies avec des equipes capables de gerer leurs data products. Sans cela, c'est le chaos.

Qu'est-ce qu'un "Data Contract" dans le contexte du Data Mesh ?

Un contrat juridique entre l'entreprise et un fournisseur de donnees
Une specification formelle du schema, SLA, qualite et acces d'un data product
Un accord verbal entre deux equipes
Un document PDF decrivant les donnees
Un Data Contract est une specification formelle (souvent en YAML) qui definit le schema, les SLA de fraicheur et disponibilite, les regles de qualite, et les droits d'acces d'un data product. C'est l'interface entre producteur et consommateur.
Quand NE PAS adopter le Data Mesh ?
N'adoptez pas le Data Mesh si : (1) moins de 5 domaines de donnees distincts, (2) moins de 50 personnes en data/tech, (3) pas de culture data-driven, (4) pas de capacite a creer une platform team, (5) l'equipe data centralisee fonctionne bien. Le Data Mesh est un investissement organisationnel majeur qui ne se justifie qu'a grande echelle.
Quelle est la difference entre Data Mesh et microservices ?
Le Data Mesh applique les principes des microservices (decentralisation, domain ownership, API contracts) au monde de la donnee. La difference : les microservices decentralisent le code applicatif, le Data Mesh decentralise la propriete et la gestion des donnees analytiques. Les deux coexistent : une equipe peut avoir ses microservices ET ses data products.

20. Data Fabric & Semantic Layer

60 min Avance

Objectifs d'apprentissage

  • Comprendre le concept de Data Fabric et ses composants
  • Maitriser le role d'un knowledge graph dans l'integration de donnees
  • Decouvrir la data virtualization comme alternative au deplacement physique
  • Comparer en detail Data Mesh vs Data Fabric
  • Comprendre le role de la semantic layer dans le self-service analytics

Data Fabric : Le tissu intelligent de donnees

Le Data Fabric est un concept promu par Gartner (depuis 2020) qui decrit une architecture basee sur les metadonnees et l'IA pour integrer, gouverner et servir les donnees a travers tous les environnements (cloud, on-premise, hybride).

Definition Gartner

"A Data Fabric is a design concept that serves as an integrated layer (fabric) of data and connecting processes. It utilizes continuous analytics over existing, discoverable and inferrable metadata assets to support the design, deployment and utilization of integrated and reusable data across all environments."

Contrairement au Data Mesh qui est un paradigme organisationnel (qui possede les donnees ?), le Data Fabric est une approche technologique (comment connecter intelligemment les donnees ?).

Les piliers du Data Fabric

  • Knowledge Graph : Un graphe de metadonnees qui cartographie toutes les relations entre les donnees, les schemas, les utilisateurs et les processus
  • Data Virtualization : Acces aux donnees sans les deplacer physiquement, via une couche d'abstraction
  • AI-Augmented Governance : L'IA automatise la classification, le lineage, la qualite et la decouverte des donnees
  • Semantic Layer : Une couche de definitions metier partagees qui traduit les structures techniques en concepts compris par tous
  • Active Metadata : Les metadonnees ne sont plus passives (documention) mais actives (recommandations, optimisation automatique)

Architecture Data Fabric

Data Fabric - Architecture complete
  +------------------------------------------------------------------+
  |                        DATA FABRIC                                |
  +------------------------------------------------------------------+
  |                                                                   |
  |  +------------------------------------------------------------+  |
  |  |              KNOWLEDGE GRAPH (Metadonnees)                  |  |
  |  |                                                             |  |
  |  | Schemas - Lineage - Qualite - Usage - Relations - Policies  |  |
  |  | (Le "cerveau" qui comprend toutes les donnees)              |  |
  |  +------------------------------------------------------------+  |
  |         |              |              |              |            |
  |  +------------+ +-------------+ +------------+ +-----------+     |
  |  | Data       | | AI/ML       | | Semantic   | | Policy    |     |
  |  | Virtualiz. | | Engine      | | Layer      | | Engine    |     |
  |  |            | |             | |            | |           |     |
  |  | Requete    | | Auto-class. | | "Revenue"  | | RBAC      |     |
  |  | unifiee    | | Auto-lineage| | = SUM(...) | | Masking   |     |
  |  | sans ETL   | | Recommand.  | | business   | | Retention |     |
  |  | Federation | | Anomalies   | | definitions| | Audit     |     |
  |  +------------+ +-------------+ +------------+ +-----------+     |
  |         |              |              |              |            |
  |  +------------------------------------------------------------+  |
  |  |                INTEGRATION LAYER                            |  |
  |  |  +--------+  +---------+  +--------+  +----------+         |  |
  |  |  | Cloud  |  | On-Prem |  | SaaS   |  | Streaming|         |  |
  |  |  | DWH    |  | SGBD    |  | APIs   |  | Kafka    |         |  |
  |  |  +--------+  +---------+  +--------+  +----------+         |  |
  |  +------------------------------------------------------------+  |
  +------------------------------------------------------------------+
  |                                                                   |
  |  CONSUMERS: BI Tools | Data Science | Applications | APIs        |
  +------------------------------------------------------------------+

Knowledge Graph : Le cerveau du Data Fabric

Un Knowledge Graph (graphe de connaissances) est une base de donnees graphe qui stocke les metadonnees sous forme de triplets (sujet, predicat, objet) pour modeliser les relations complexes entre les entites de donnees.

RDF/Turtle - Exemple de Knowledge Graph data
# Knowledge Graph - Relations entre entites de donnees
@prefix data: <https://company.com/data/> .
@prefix schema: <https://company.com/schema/> .
@prefix quality: <https://company.com/quality/> .

# Table et ses colonnes
data:table_orders
    schema:database "snowflake_prod" ;
    schema:schema "gold" ;
    schema:owner "team-finance" ;
    schema:contains data:col_order_id, data:col_customer_id ;
    schema:refreshFrequency "hourly" ;
    quality:completeness 0.995 ;
    quality:lastChecked "2024-01-15T06:00:00Z" .

# Relations entre tables
data:col_customer_id
    schema:type "BIGINT" ;
    schema:foreignKey data:table_customers.customer_id ;
    schema:piiClassification "none" .

# Lineage : d'ou viennent les donnees ?
data:table_orders
    schema:derivedFrom data:bronze_orders ;
    schema:transformedBy data:dbt_model_slv_orders ;
    schema:consumedBy data:dashboard_revenue, data:ml_model_churn .

# Usage : qui utilise quoi ?
data:dashboard_revenue
    schema:owner "CFO Office" ;
    schema:queries data:table_orders ;
    schema:avgDailyQueries 450 ;
    schema:lastAccessed "2024-01-15T14:32:00Z" .

Benefice cle du Knowledge Graph

Le knowledge graph permet des requetes impossibles avec un catalogue traditionnel : "Quelles tables contenant des PII sont accessibles par des utilisateurs hors de l'equipe compliance ?" ou "Quel est l'impact si la table bronze_orders tombe en panne ?" (impact analysis via le lineage).

Data Virtualization : Acceder sans deplacer

La virtualisation de donnees permet d'acceder a des donnees distribuees via une interface unifiee, sans les copier physiquement. Le moteur de virtualisation traduit les requetes et les distribue aux sources.

Comment ca marche ?

  1. L'utilisateur ecrit une requete SQL contre une vue virtuelle
  2. Le moteur de virtualisation decompose la requete en sous-requetes pour chaque source
  3. Chaque sous-requete est envoyee a la source appropriee (Snowflake, PostgreSQL, API REST...)
  4. Les resultats sont assembles et retournes a l'utilisateur comme s'il s'agissait d'une seule table
SQL - Requete via Data Virtualization (Denodo/Dremio)
-- L'utilisateur ecrit UNE requete SQL
-- Le moteur de virtualisation la distribue aux 3 sources

SELECT
    c.customer_name,             -- Source: PostgreSQL (CRM)
    o.total_orders,              -- Source: Snowflake (DWH)
    s.satisfaction_score,        -- Source: API Salesforce
    m.churn_probability          -- Source: ML Model API
FROM virtual.customers c
JOIN virtual.order_summary o ON c.id = o.customer_id
JOIN virtual.satisfaction s ON c.id = s.customer_id
JOIN virtual.ml_predictions m ON c.id = m.customer_id
WHERE c.country = 'FR'
  AND o.total_orders > 10;

-- Le moteur de virtualisation :
-- 1. Envoie "SELECT name FROM postgres.crm.customers WHERE country='FR'"
-- 2. Envoie "SELECT * FROM snowflake.gold.order_summary"
-- 3. Appelle l'API Salesforce /satisfaction?country=FR
-- 4. Appelle l'API ML /predictions
-- 5. Fait la jointure en memoire et retourne le resultat

Outils de Data Virtualization

OutilTypeForcesPrix
DenodoEnterpriseLeader Gartner, 200+ connecteurs$$$$
DremioOpen-coreLakehouse natif, Apache Arrow$$ - $$$
Starburst (Trino)Open-sourceSQL federe, performantGratuit - $$$
Databricks Unity CatalogPlatformIntegre lakehouseInclus
Google BigQuery OmniCloudMulti-cloud, BigQuery SQLPay-per-use

Semantic Layer : La traduction metier

La Semantic Layer (couche semantique) est une couche d'abstraction qui definit les metriques et dimensions metier de maniere centralisee, pour que tous les outils BI et utilisateurs parlent le meme langage.

Probleme sans Semantic Layer

  • Le dashboard Tableau calcule le "revenu" differemment de PowerBI
  • Chaque analyste cree sa propre definition de "client actif"
  • Impossible de garantir que deux rapports donnent le meme chiffre

Solution avec Semantic Layer

  • UNE definition de "revenu" partagee par tous les outils
  • Les metriques sont versionees et documentees
  • Le self-service est possible car les definitions sont claires
YAML - Semantic Layer avec dbt Metrics / Cube.js
# Cube.js - Definition semantique centralisee
cube('Orders', {
  sql: `SELECT * FROM gold.fact_orders`,

  measures: {
    count: {
      type: 'count',
      description: 'Nombre total de commandes'
    },
    totalRevenue: {
      type: 'sum',
      sql: 'total_amount',
      description: 'Revenu brut total (hors taxes, hors annulations)',
      filters: [{ sql: `${CUBE}.status != 'CANCELLED'` }],
      format: 'currency'
    },
    avgOrderValue: {
      type: 'avg',
      sql: 'total_amount',
      description: 'Panier moyen (commandes non annulees)',
      filters: [{ sql: `${CUBE}.status != 'CANCELLED'` }],
      format: 'currency'
    },
    conversionRate: {
      type: 'number',
      sql: `${count} / NULLIF(${Sessions.count}, 0) * 100`,
      description: 'Taux de conversion sessions -> commandes',
      format: 'percent'
    }
  },

  dimensions: {
    status: { sql: 'status', type: 'string' },
    orderDate: { sql: 'order_date', type: 'time' },
    country: { sql: 'customer_country', type: 'string' }
  }
});

// Maintenant TOUS les outils (Tableau, PowerBI, Metabase, API)
// utilisent la MEME definition de "totalRevenue"

Data Mesh vs Data Fabric : Comparaison detaillee

CritereData MeshData Fabric
NatureParadigme organisationnelApproche technologique
FocusQui possede les donnees ?Comment connecter les donnees ?
DecentralisationPropriete decentralisee par domaineAcces unifie, sources distribuees
GouvernanceFederee (standards globaux, execution locale)Centralisee, augmentee par l'IA
Role de l'IASecondaire (automatisation CI/CD)Central (classification, lineage, recommandation)
MetadonneesData contracts par data productKnowledge graph actif, metadata-driven
Changement requisOrganisationnel majeur (restructuration equipes)Technologique (integration layer)
Pre-requisCulture data-driven, domaines clairs, 200+ pers.Budget pour outils enterprise
ScalabiliteScale avec le nombre de domainesScale avec le nombre de sources
ComplementariteLes deux sont complementaires ! Data Mesh pour l'organisation + Data Fabric pour la technologie
Ideal pourGrandes entreprises avec domaines metier autonomesEntreprises avec sources heterogenes complexes
PromoteurZhamak Dehghani / ThoughtWorksGartner

Ne choisissez pas entre les deux

Data Mesh et Data Fabric repondent a des questions differentes. Un Data Mesh bien implemente beneficie enormement d'une couche Data Fabric pour la decouverte, le lineage et la virtualisation. Inversement, un Data Fabric gagne en scalabilite avec des domain owners responsabilises (principe du Mesh).

JP Morgan : Data Fabric pour les donnees de marche

Contexte : JP Morgan Chase, premiere banque mondiale par actifs (3.7T$), gere des donnees de marche provenant de 500+ sources (bourses mondiales, feeds Reuters/Bloomberg, donnees internes, alternative data). La latence et la coherence sont critiques pour le trading.

Challenge :

  • 500+ sources de donnees avec des formats heterogenes (FIX, FPML, JSON, CSV, streaming)
  • Reglementation stricte : MiFID II, Dodd-Frank imposent un lineage complet
  • Les traders ont besoin de donnees en temps reel ; le risk management a besoin d'historique complet
  • 10,000+ utilisateurs internes consomment les donnees de marche

Implementation Data Fabric :

  • Knowledge Graph : 2M+ entites de metadonnees modelisant les relations entre instruments financiers, sources, pipelines et consommateurs
  • Data Virtualization : Couche Trino/Starburst permettant de requeter les donnees in-situ sans les copier dans un data lake central
  • AI-Augmented Governance : Classification automatique des donnees sensibles (ML sur les noms de colonnes et patterns), lineage automatique
  • Semantic Layer : Definition unique de "prix de cloture", "volume", "spread" partagee par tous les desks

Resultats :

  • Temps d'acces a une nouvelle source : 3 mois --> 2 semaines
  • Conformite reglementaire : lineage 100% automatise pour les audits
  • Reduction de 40% des copies de donnees (virtualisation vs replication)
  • Adoption self-service : 70% des requetes ad-hoc faites directement par les analystes

Quiz - Data Fabric & Semantic Layer

Quel composant du Data Fabric stocke les relations entre toutes les entites de donnees ?

Data Virtualization Engine
Knowledge Graph
Semantic Layer
ETL Server
Le Knowledge Graph est le "cerveau" du Data Fabric. Il stocke les metadonnees sous forme de graphe (triplets sujet-predicat-objet) modelisant les relations entre tables, colonnes, pipelines, utilisateurs et policies.

Quelle est la principale difference entre Data Mesh et Data Fabric ?

Data Mesh est plus recent
Data Mesh est organisationnel, Data Fabric est technologique
Data Fabric ne necessite pas de cloud
Ils sont exactement la meme chose
Le Data Mesh repond a "qui possede les donnees ?" (paradigme organisationnel avec domaines autonomes). Le Data Fabric repond a "comment connecter intelligemment les donnees ?" (approche technologique basee sur les metadonnees et l'IA).

Quel probleme la Semantic Layer resout-elle ?

Le stockage des donnees brutes
Les definitions incoherentes de metriques metier entre outils BI
La compression des fichiers Parquet
La scalabilite du data warehouse
La Semantic Layer centralise les definitions de metriques et dimensions metier pour que tous les outils (Tableau, PowerBI, Metabase, APIs) utilisent les memes definitions. Fini les chiffres qui ne matchent pas entre deux dashboards !

21. Outils de Modelisation

45 min Intermediaire

Objectifs d'apprentissage

  • Connaitre les principaux outils de modelisation de donnees du marche
  • Comparer leurs fonctionnalites, prix et cas d'usage
  • Maitriser la syntaxe DBML de dbdiagram.io
  • Choisir l'outil adapte a la taille et aux besoins de son equipe
  • Utiliser les outils de documentation automatique (dbt docs, SchemaSpy)

Panorama des outils de modelisation

Le choix de l'outil de modelisation depend de la taille de l'equipe, du budget, de la complexite du modele et des besoins de collaboration. Voici un comparatif detaille des solutions principales.

OutilTypePrix/moisCollaborationForward/Reverse Eng.Cloud/DesktopConnecteurs DBExportIdeal pour
ERwinEnterprise$500+/userMulti-userOui/OuiDesktop + Server50+DDL, PDF, HTMLGrands groupes, compliance
dbdiagram.ioCode-firstGratuit - $15Partage liensDBML/OuiCloudExport SQLSQL, PDF, PNGStartups, documentation
dbt + docsCode-firstGratuit - $$Git nativeNon/LineageCLI + CloudDWH cloudHTML siteAnalytics engineering
SqlDBMCloud nativeGratuit - $29TeamsOui/OuiCloud15+DDL, PDFEquipes cloud-first
DrawSQLVisuel legerGratuit - $19PartageNon/ImportCloudImport SQLPNG, SQLPrototypage rapide
LucidchartDiagramme$8 - $15Temps reelImport/NonCloudImport ERDPNG, PDF, VisioCommunication, presentations
PowerDesigner (SAP)Enterprise$$$RepositoryOui/OuiDesktop40+DDL, XMLEcosysteme SAP
VertabeloCloudGratuit - $39TeamsOui/OuiCloud10+DDL, PDF, PNGPME, enseignement
Moon ModelerDesktop$50 one-timeNonOui/OuiDesktopNoSQL + SQLScript, PNGNoSQL modeling
SchemaSpyDoc autoGratuit (OSS)HTML genNon/OuiCLIJDBCHTML siteDocumentation existant

Focus : dbdiagram.io et la syntaxe DBML

dbdiagram.io est l'outil prefere des equipes agiles pour sa simplicite : on ecrit du code DBML (Database Markup Language) et le diagramme ER se genere automatiquement.

Syntaxe DBML - Guide complet

DBML - Modele e-commerce complet
// ===========================================
// Modele E-Commerce - dbdiagram.io (DBML)
// ===========================================

// Configuration du projet
Project ecommerce {
  database_type: 'PostgreSQL'
  Note: 'Modele e-commerce pour la plateforme ShopFast'
}

// =====================
// TABLES DIMENSION
// =====================

Table dim_customers {
  customer_id bigint [pk, increment]
  email varchar(255) [unique, not null]
  first_name varchar(100) [not null]
  last_name varchar(100) [not null]
  phone varchar(20)
  country_code char(2) [not null, default: 'FR']
  segment varchar(20) [note: 'Premium, Standard, New']
  created_at timestamp [default: `now()`]
  updated_at timestamp
  is_active boolean [default: true]

  Note: 'Table dimension clients - SCD Type 2'
}

Table dim_products {
  product_id bigint [pk, increment]
  sku varchar(50) [unique, not null]
  name varchar(255) [not null]
  description text
  category_id int [ref: > dim_categories.category_id]
  brand varchar(100)
  unit_price decimal(10,2) [not null]
  cost_price decimal(10,2)
  weight_kg decimal(6,2)
  is_active boolean [default: true]
  created_at timestamp [default: `now()`]

  indexes {
    sku [unique]
    (category_id, is_active) [name: 'idx_product_category']
  }
}

Table dim_categories {
  category_id int [pk, increment]
  name varchar(100) [not null]
  parent_id int [ref: > dim_categories.category_id]
  level int [note: '1=root, 2=sub, 3=leaf']
  path varchar(500) [note: 'Materialized path: /Electronics/Phones/']
}

Table dim_date {
  date_key int [pk, note: 'Format YYYYMMDD']
  full_date date [unique, not null]
  day_of_week int
  day_name varchar(10)
  month int
  month_name varchar(10)
  quarter int
  year int
  is_weekend boolean
  is_holiday boolean
}

// =====================
// TABLES DE FAITS
// =====================

Table fact_orders {
  order_id bigint [pk, increment]
  customer_id bigint [not null, ref: > dim_customers.customer_id]
  order_date_key int [not null, ref: > dim_date.date_key]
  status varchar(20) [not null, note: 'PENDING|SHIPPED|COMPLETED|CANCELLED']
  total_amount decimal(12,2) [not null]
  discount_amount decimal(10,2) [default: 0]
  shipping_amount decimal(8,2) [default: 0]
  tax_amount decimal(10,2)
  payment_method varchar(30)
  shipping_country char(2)
  created_at timestamp [default: `now()`]

  indexes {
    customer_id
    order_date_key
    (status, order_date_key) [name: 'idx_status_date']
  }
}

Table fact_order_lines {
  line_id bigint [pk, increment]
  order_id bigint [not null, ref: > fact_orders.order_id]
  product_id bigint [not null, ref: > dim_products.product_id]
  quantity int [not null]
  unit_price decimal(10,2) [not null]
  line_total decimal(12,2) [not null, note: 'quantity * unit_price']
  discount_pct decimal(5,2) [default: 0]
}

// =====================
// ENUM (optionnel)
// =====================

Enum order_status {
  PENDING
  SHIPPED
  COMPLETED
  CANCELLED
}

Astuce DBML

Collez ce code dans dbdiagram.io pour generer instantanement le diagramme ER. Vous pouvez ensuite exporter en SQL (PostgreSQL, MySQL, SQL Server), PDF ou PNG. Le DBML peut aussi etre versionne dans Git aux cotes du code.

Focus : dbt docs - Documentation vivante

dbt genere automatiquement une documentation web interactive a partir de vos modeles SQL et fichiers schema.yml. La documentation inclut le lineage (DAG) complet.

YAML - schema.yml pour dbt docs
# models/gold/schema.yml
version: 2

models:
  - name: gold_daily_revenue
    description: |
      KPI quotidien de revenu agrege par pays et categorie.
      **Owner**: Finance Team
      **SLA**: Rafraichi avant 6h UTC chaque jour
      **Consumers**: Dashboard CFO, API Revenue
    columns:
      - name: revenue_date
        description: Date du jour agrege (UTC)
        tests: [not_null, unique]
      - name: customer_country
        description: Code pays ISO 3166-1 alpha-2
        tests: [not_null]
      - name: gross_revenue
        description: |
          Revenu brut = SUM(quantity * unit_price)
          Exclut les commandes CANCELLED.
          Devise: EUR (converti au taux du jour)
        tests:
          - not_null
          - dbt_utils.accepted_range:
              min_value: 0
      - name: total_orders
        description: Nombre de commandes COMPLETED distinctes
        tests: [not_null]

  - name: gold_customer_360
    description: |
      Vue 360 du client combinant profil, commandes,
      satisfaction et predictions ML.
    meta:
      owner: team-analytics
      tier: tier-1
      pii: false  # PII masquee
    columns:
      - name: customer_id
        description: Identifiant unique client
        tests: [unique, not_null]
      - name: lifetime_value
        description: CLV predite sur 12 mois (modele ML v3.2)
Bash - Generer la documentation dbt
# Generer la documentation
$ dbt docs generate

# Servir le site de documentation en local
$ dbt docs serve --port 8080

# Le site inclut automatiquement :
# - Description de chaque modele
# - Schema des colonnes avec tests
# - Lineage DAG interactif (qui depend de qui)
# - Source freshness
# - Tags et metadata custom

Choisir le bon outil pour votre equipe

Evaluez votre contexte et choisissez :

Scenario A : Startup, 5 personnes, budget serre

  • Modelisation : dbdiagram.io (gratuit, rapide, DBML dans Git)
  • Documentation : dbt docs (gratuit, auto-genere)
  • Communication : DrawSQL (gratuit, partage facile)

Scenario B : PME, 20 personnes data, cloud-first

  • Modelisation : SqlDBM ($29/user, collaboration, reverse engineering)
  • Documentation : dbt docs + dbt Cloud (lineage auto, scheduling)
  • Communication : Lucidchart ($15/user, collaboration temps reel)

Scenario C : Grand groupe, 100+ data engineers, compliance stricte

  • Modelisation : ERwin ou PowerDesigner (enterprise, versioning, audit trail)
  • Documentation : ERwin + SchemaSpy (documentation legacy + existant)
  • Gouvernance : Alation ou Collibra (catalog enterprise)
  • Communication : Lucidchart Enterprise (SSO, admin)

Scenario D : Equipe NoSQL / multi-model

  • Modelisation : Moon Modeler (MongoDB, DynamoDB, Cassandra, GraphDB)
  • Documentation : Custom (pas d'outil standard pour NoSQL)

Criteres de selection detailles

CriterePoidsQuestions a poser
BudgetHautLicence/user ou flat ? Open-source possible ?
CollaborationHautEdition simultanee ? Commentaires ? Review workflow ?
Forward EngineeringMoyenGeneration de DDL pour votre SGBD cible ?
Reverse EngineeringHautImport du schema existant depuis la DB ?
VersioningHautIntegration Git ? Historique des modifications ?
ExportMoyenPDF, PNG, SQL, XML, Visio ? API ?
Integration CI/CDMoyenCLI ? API REST ? Webhooks ?
LineageMoyenVisualisation des dependances entre tables ?
NoSQL supportBas*MongoDB, Cassandra, DynamoDB ?
SSO / AdminHaut*SAML, SCIM, admin console ? (*Enterprise)

Mon conseil : commencez par dbdiagram.io pour la modelisation rapide et dbt docs pour la documentation vivante. C'est gratuit, versionnable dans Git, et suffisant pour 90% des equipes. Migrez vers un outil enterprise seulement si vous avez des besoins specifiques (compliance, NoSQL, 100+ users).

Quiz - Outils de Modelisation

Quel langage utilise dbdiagram.io pour definir les modeles ?

SQL DDL
UML
DBML (Database Markup Language)
YAML
dbdiagram.io utilise DBML, un langage simple et lisible pour definir des schemas de bases de donnees. Le DBML peut etre exporte en SQL et versionne dans Git.

Quel outil genere automatiquement une documentation web avec lineage a partir de modeles SQL ?

ERwin
dbt docs
DrawSQL
Lucidchart
dbt docs genere un site web interactif avec la description de chaque modele, le schema des colonnes, les tests de qualite et un DAG de lineage montrant les dependances entre modeles.

Pour un grand groupe avec des exigences de compliance et 100+ utilisateurs, quel type d'outil est le plus adapte ?

dbdiagram.io gratuit
DrawSQL
ERwin ou PowerDesigner (enterprise)
Un tableur Excel
Les outils enterprise comme ERwin ou PowerDesigner offrent le versioning avance, les audit trails, le SSO/SAML, l'administration multi-utilisateurs et les connecteurs enterprise necessaires aux grands groupes.

22. Projet - Data Platform Design

120 min Lab

Objectifs du projet

  • Concevoir une plateforme data complete de bout en bout
  • Appliquer les patterns architecturaux appris (Medallion, ETL/ELT, Data Mesh)
  • Produire un Architecture Decision Record (ADR) pour chaque choix
  • Documenter avec les outils de modelisation adaptes
  • Presenter et defendre ses choix comme un Data Architect senior

Le brief : MediConnect - Plateforme de telemedecine

Contexte : MediConnect est une startup de telemedecine en forte croissance. Fondee en 2021, elle connecte 5,000 medecins avec 800,000 patients actifs en France. Suite a une levee de fonds Serie B (30M EUR), le CEO mandate un Data Architect (vous !) pour concevoir la plateforme data de l'entreprise.

Sources de donnees actuelles :

  • PostgreSQL : Base applicative principale (patients, medecins, consultations, ordonnances) - 50 GB, 200 tables
  • MongoDB : Logs des teleconsultations video (metadata, duree, qualite) - 500 GB, 10M docs/mois
  • Stripe API : Paiements et facturations - 100K transactions/mois
  • Intercom : Tickets support et NPS - 5K tickets/mois
  • Google Analytics 4 : Trafic web et app mobile - 2M events/jour
  • IoT devices : Objets connectes (tensiometres, oximetres) - 1M mesures/jour (croissance 50%/an)

Besoins metier (stakeholders) :

  • CEO : Dashboard executif avec MRR, churn, NPS, croissance. Rafraichissement quotidien.
  • Directrice Medicale : Analyse des parcours de soins, efficacite des traitements, temps d'attente. Conformite HDS (Hebergement Donnees de Sante).
  • VP Product : A/B testing, conversion funnel, retention par cohorte. Quasi temps reel.
  • Data Science : Feature store pour modeles predictifs (risque patient, recommendation medecin, detection fraude). ML en production.
  • Compliance : Audit trail complet, droit a l'effacement RGPD, anonymisation pour la recherche.

Contraintes :

  • Budget data platform : 15K EUR/mois (hors salaires)
  • Equipe : 2 data engineers + 1 analytics engineer + 1 data scientist (recrutement de 3 personnes supplementaires prevu)
  • Hebergement HDS obligatoire (AWS eu-west-3 Paris ou OVHcloud)
  • Donnees de sante : chiffrement at rest et in transit, access logs, retention 20 ans pour les dossiers medicaux
  • Disponibilite : les dashboards doivent etre disponibles 99.5% du temps

Lab : Conception de la plateforme MediConnect

Etape 1 : Analyse des besoins et priorisation (15 min)

Classez les besoins par priorite (P0 = critique, P1 = important, P2 = nice-to-have) et identifiez les contraintes bloquantes.

Livrable : Tableau des besoins priorises avec justification

BesoinStakeholderPrioriteContrainte associee
Dashboard executif (MRR, churn)CEOP0Rafraichissement quotidien, 99.5% uptime
Conformite HDS + RGPDComplianceP0Chiffrement, audit trail, droit effacement
Parcours de soinsDir. MedicaleP0Donnees de sante, retention 20 ans
A/B testing & funnelVP ProductP1Quasi temps reel (< 5 min latence)
Feature store MLData ScienceP1Freshness variable selon les features
Analyse IoT predictiveDir. MedicaleP2Volume croissant, streaming a terme

Etape 2 : Choix d'architecture (20 min)

Evaluez et choisissez le pattern architectural principal. Justifiez votre choix dans un ADR (Architecture Decision Record).

Options a evaluer :

  • Option A : Classic DWH (Snowflake) + ETL (Fivetran + dbt)
  • Option B : Lakehouse (Databricks) + Medallion Architecture
  • Option C : Data Mesh (domaines : Medical, Product, Finance)
  • Option D : Hybride Lakehouse + streaming (Kafka + Flink + Delta Lake)

Indice

Avec une equipe de 2-5 personnes et un budget de 15K/mois, le Data Mesh est premature. Le streaming complet est probablement overkill pour la majorite des besoins actuels. Pensez "start simple, evolve later".

Etape 3 : Architecture Decision Record (15 min)

Redigez un ADR pour votre choix principal en suivant ce template :

Markdown - Template ADR
# ADR-001: Choix de l'architecture data platform MediConnect

## Statut
Propose | Accepte | Remplace | Deprecie

## Date
2024-01-15

## Contexte
MediConnect est une plateforme de telemedecine avec 800K patients,
5000 medecins, et 6 sources de donnees heterogenes. L'equipe data
compte 2 DE + 1 AE + 1 DS. Budget: 15K EUR/mois.

## Decision
Nous choisissons l'architecture [VOTRE CHOIX] car:
1. [Raison 1 - alignement avec les contraintes]
2. [Raison 2 - adequation avec la taille de l'equipe]
3. [Raison 3 - conformite HDS/RGPD]

## Alternatives evaluees
- [Option X]: Rejetee car [raison]
- [Option Y]: Rejetee car [raison]

## Consequences
### Positives
- [Consequence positive 1]
- [Consequence positive 2]

### Negatives / Risques
- [Risque 1 et mitigation]
- [Risque 2 et mitigation]

### Plan d'evolution
- Phase 1 (M1-M3): [scope minimal]
- Phase 2 (M4-M6): [ajout de capacites]
- Phase 3 (M7-M12): [echelle et optimisation]

## Decideurs
Data Architect (vous), CTO, VP Engineering

Etape 4 : Modelisation des donnees (20 min)

Concevez le modele de donnees pour la couche Gold / Data Mart.

Tables a modeliser (minimum) :

  • dim_patients : Profil patient anonymise (age_range, region, pathologies principales)
  • dim_doctors : Profil medecin (specialite, region, note moyenne)
  • dim_date : Dimension temps standard
  • fact_consultations : Faits teleconsultations (duree, satisfaction, prescription_count)
  • fact_payments : Faits paiements (montant, methode, statut)
  • agg_daily_kpis : Table aggregee pour le dashboard CEO

Outil suggere : dbdiagram.io (DBML) ou dessin sur papier

Etape 5 : Gouvernance et conformite (15 min)

Definissez la strategie de gouvernance pour les donnees de sante :

  • Classification : Definir 4 niveaux (Public, Internal, Confidential, Restricted)
  • PII Handling : Quelles colonnes sont PII ? Methode de masquage/pseudonymisation ?
  • Retention : Quelle politique par type de donnee ?
  • Access Control : Qui a acces a quoi ? RBAC par role
  • Droit a l'effacement : Comment implementer le "droit a l'oubli" RGPD dans le DWH ?

Attention : Donnees de sante

Les donnees de sante sont des "donnees sensibles" au sens du RGPD (Article 9). Leur traitement est interdit par defaut sauf exceptions specifiques (consentement explicite, interet vital, recherche medicale). L'hebergement HDS impose un hebergeur certifie, un chiffrement AES-256, et des audits reguliers.

Etape 6 : Choix des outils et budget (10 min)

Definissez votre stack technologique et estimez le budget mensuel :

ComposantOutil choisiJustificationCout/mois
Ingestion[Votre choix][Pourquoi ?][X EUR]
Stockage/Compute[Votre choix][Pourquoi ?][X EUR]
Transformation[Votre choix][Pourquoi ?][X EUR]
Orchestration[Votre choix][Pourquoi ?][X EUR]
BI / Dashboards[Votre choix][Pourquoi ?][X EUR]
Monitoring / Qualite[Votre choix][Pourquoi ?][X EUR]
TOTAL[≤ 15K EUR]

Etape 7 : Diagramme d'architecture (15 min)

Dessinez le diagramme d'architecture complet montrant :

  • Les sources de donnees (gauche)
  • Les couches d'ingestion et de transformation (centre)
  • Le stockage par couche (Bronze/Silver/Gold ou equivalent)
  • Les consommateurs (droite) : BI, ML, APIs
  • Les flux de donnees avec les latences
  • Les composants de gouvernance (transversal)

Outil suggere : Lucidchart, draw.io, ou meme papier/crayon.

Etape 8 : Presentation et defense (10 min)

Preparez un pitch de 5 minutes comme si vous presentiez au CTO de MediConnect :

  1. 1 min : Resumee de l'architecture choisie et pourquoi
  2. 1 min : Modele de donnees et couches
  3. 1 min : Gouvernance et conformite HDS/RGPD
  4. 1 min : Budget et stack technologique
  5. 1 min : Plan de mise en oeuvre phase par phase

Criteres d'evaluation :

  • Adequation avec les besoins metier et les contraintes
  • Realisme (budget, equipe, timeline)
  • Scalabilite future (croissance IoT, nouveaux domaines)
  • Gouvernance et conformite bien adressees
  • Qualite de la documentation (ADR, diagrammes)