Introduction a la Modelisation de Donnees
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
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
| Critere | OLTP (Transactionnel) | OLAP (Analytique) |
|---|---|---|
| Objectif | Operations quotidiennes | Analyse et decisions |
| Requetes | INSERT/UPDATE/DELETE simples | SELECT complexes avec aggregations |
| Schema | Normalise (3NF) | Denormalise (Star/Snowflake) |
| Volume par requete | Quelques lignes | Millions de lignes |
| Utilisateurs | Milliers (applications) | Dizaines (analystes) |
| Latence | Millisecondes | Secondes a minutes |
| Modelisation | Merise/UML, 3NF | Kimball, 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
Modelisation Conceptuelle : Merise & UML
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
ββββββββββββ 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
| Notation | Signification | Exemple |
|---|---|---|
| 0,1 | Zero ou un | Client a 0 ou 1 adresse de livraison |
| 1,1 | Exactement un | Commande appartient a 1 et 1 seul client |
| 0,n | Zero a plusieurs | Client peut avoir 0 a N commandes |
| 1,n | Un a plusieurs | Commande contient au moins 1 produit |
UML - Diagramme de Classes
@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.
Modelisation Logique & Physique
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
| Forme | Regle | Elimine |
|---|---|---|
| 1NF | Valeurs atomiques, pas de groupes repetitifs | Colonnes multi-valuees |
| 2NF | 1NF + tout attribut non-cle depend de la cle ENTIERE | Dependances partielles |
| 3NF | 2NF + pas de dependance transitive | Dependances transitives |
| BCNF | Tout determinant est une cle candidate | Anomalies restantes |
-- 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
-- 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.
Dimensional Modeling - Methode Kimball
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
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)
| Type | Strategie | Historique | Exemple |
|---|---|---|---|
| SCD 0 | Pas de changement | Non | Date de naissance |
| SCD 1 | Ecraser l'ancienne valeur | Non | Correction d'erreur |
| SCD 2 | Nouvelle ligne avec dates | Oui (complet) | Changement d'adresse |
| SCD 3 | Colonne previous_value | Partiel (N-1) | Changement de categorie |
| SCD 4 | Table d'historique separee | Oui (separe) | Historique des prix |
| SCD 6 | Hybride 1+2+3 | Oui (complet+courant) | Best of all worlds |
-- 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 / Dimension | Date | Client | Produit | Magasin | Employe |
|---|---|---|---|---|---|
| Ventes | X | X | X | X | X |
| Inventaire | X | X | X | ||
| Retours | X | X | X | X | |
| Marketing | X | X |
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.
Data Vault 2.0
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
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.
-- 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
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
| Critere | 3NF (Inmon) | Kimball (Star) | Data Vault | OBT |
|---|---|---|---|---|
| Complexite | Moyenne | Faible | Elevee | Tres faible |
| Nombre de tables | Eleve | Moyen | Tres eleve (3x) | 1 |
| Agilite | Faible | Moyenne | Elevee | Elevee |
| Performance lecture | Faible (JOINs) | Bonne | Faible (sans marts) | Excellente |
| Auditabilite | Moyenne | Faible | Excellente | Nulle |
| Multi-sources | Difficile | Moyen | Excellent | Difficile |
| Scalabilite equipe | Moyenne | Bonne | Excellente | Faible |
| Courbe apprentissage | Moyenne | Faible | Elevee | Nulle |
Arbre de Decision
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
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 :
-- 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 :
-- 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
-- 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
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) ?
2. Dans un schema Kimball, qu'est-ce qu'une "dimension conforme" ?
3. Quel type de SCD cree une nouvelle ligne avec des dates de validite ?
4. En Data Vault, quel est le role d'un Hub ?
5. Quelle approche de modelisation est la plus adaptee pour une banque soumise a des audits reglementaires stricts ?
6. Dans un modele Kimball, qu'est-ce que le "grain" d'une table de faits ?
7. Pourquoi utilise-t-on des hash keys (MD5/SHA) en Data Vault ?
8. Quel est l'inconvenient majeur du pattern "One Big Table" (OBT) ?
Lecon 9 : DAMA-DMBOK 2.0 - Le Referentiel de la Data
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.
ββββββββββββββββββββββββββββ
β 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 :
| Section | Description | Exemple (Data Quality) |
|---|---|---|
| Definition | Ce qu'est le domaine | Planification et controle des techniques de qualite |
| Activities | Ce qu'on fait dans ce domaine | Profiling, cleansing, monitoring, rules definition |
| Deliverables | Ce qu'on produit | DQ scorecards, SLA reports, exception reports |
| Roles & Responsibilities | Qui fait quoi | DQ Analyst, Data Steward, DQ Manager |
| Practices & Techniques | Comment on le fait | Statistical profiling, pattern matching, fuzzy matching |
| Tools | Avec quoi on le fait | Informatica DQ, Talend DQ, Great Expectations |
| Organization & Culture | Le contexte organisationnel | Culture 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.
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"
| Critere | Niveau 1 | Niveau 3 | Niveau 5 |
|---|---|---|---|
| Processus | Nettoyage ad hoc quand un probleme survient | Regles DQ definies, profiling automatise | DQ predictive, auto-remediation par ML |
| Outils | Excel, scripts manuels | Outils DQ dedies (Informatica, GX) | Plateforme DQ integree, observability |
| Roles | Personne n'est responsable | Data Stewards nommes, DQ analysts | Centre d'excellence DQ, DQ engineers |
| Metriques | Aucune metrique formelle | DQ scorecards par domaine | SLAs automatises, impact business mesure |
| Culture | "C'est le probleme de l'IT" | Responsabilite partagee | Data 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 :
- Data Governance : Avez-vous un programme formel ? Des Data Owners nommes ?
- Data Quality : Mesurez-vous la qualite ? Avez-vous des SLAs ?
- Metadata Management : Avez-vous un data catalog ? Les metadonnees sont-elles a jour ?
- Data Security : Classification des donnees en place ? Audit trail ?
- 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 :
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 β βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
# 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
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.
βββββββββββββββββββββ
β 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 :
| Role | Responsabilite | Profil typique | Nombre |
|---|---|---|---|
| Executive Sponsor | Porte le programme au niveau C-suite. Alloue le budget. Resout les conflits escales | CDO, CIO, CFO | 1 |
| Data Governance Lead | Pilote operationnel du programme. Coordonne les stewards, reporte au sponsor | Manager Data Governance | 1-2 |
| Data Owner | Responsable business d'un domaine de donnees. Decide qui a acces, valide les definitions | VP ou Director metier | 5-15 (1 par domaine) |
| Data Steward | Gardien operationnel de la qualite. Definit les regles, resout les problemes DQ | Expert metier / analyste | 20-100 |
| Data Custodian | Responsable technique : stockage, securite, backup, acces. Implemente les decisions | DBA, Data Engineer | Variable |
| Data Consumer | Utilise les donnees. Reporte les problemes. Respecte les politiques | Analyste, Data Scientist | Toute 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 :
# 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 :
| Categorie | KPI | Cible | Frequence |
|---|---|---|---|
| Data Quality | DQ Score global (% de regles respectees) | > 95% | Hebdomadaire |
| Nombre d'incidents DQ critiques | < 5/mois | Mensuelle | |
| Temps moyen de resolution DQ | < 48h | Mensuelle | |
| Adoption | % de domaines avec Data Owner nomme | 100% | Trimestrielle |
| Utilisation du data catalog (MAU) | > 60% des analystes | Mensuelle | |
| Nombre de Data Stewards actifs | 1 pour 50 utilisateurs | Trimestrielle | |
| Compliance | % de donnees classifiees | > 90% | Trimestrielle |
| Demandes d'acces traitees dans les SLA | > 95% | Mensuelle | |
| Business Value | Reduction du temps de preparation des donnees | -30%/an | Annuelle |
| Incidents business lies a la data | -50%/an | Annuelle |
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)
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.
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
| Style | Golden Record | Ecriture | Complexite | Cas d'usage ideal |
|---|---|---|---|---|
| Registry | Virtuel (pointeurs) | Dans les sources | Faible | Premier pas MDM, organisations immatures |
| Consolidation | Physique (copie) | Dans les sources | Moyenne | Analytics, vue 360, pas besoin de write-back |
| Coexistence | Physique + sync | Hub ET sources | Elevee | Organisations matures, donnees critiques |
| Centralized | Physique (maitre) | Hub uniquement | Tres elevee | Greenfield, 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.
ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ
β 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β
ββββββββββββ ββββββββββββ ββββββββββββ
-- 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 :
- Commencez toujours par la Data Quality avant le MDM
- Pilotez sur un perimetre restreint (1-2 pays, 1 entite)
- Prevoyez des Data Stewards pour le matching manuel (10-15% des cas)
- Commencez par le style Consolidation, evoluez ensuite si necessaire
- 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 :
- D'abord : profiling des donnees sources (comprendre l'etat actuel)
- Ensuite : nettoyage et standardisation des donnees sources
- Puis : implementation du MDM sur des donnees propres
- Enfin : DQ monitoring continu sur le Golden Record ET les sources
Outils MDM du marche
| Outil | Style supporte | Forces | Faiblesse | Prix indicatif |
|---|---|---|---|---|
| Informatica MDM | Tous les 4 | Le plus complet, leader du marche | Complexe, cher, lent a implementer | $500K-$2M/an |
| Semarchy xDM | Consolidation, Coexistence | Agile, rapide a deployer, UI moderne | Moins connu, ecosysteme plus petit | $150K-$500K/an |
| Reltio | Consolidation, Coexistence | Cloud-native, ML matching, API-first | Jeune, moins de references | $200K-$800K/an |
| SAP Master Data Governance | Centralized | Integration SAP native | Lie a l'ecosysteme SAP | Inclus dans les licences SAP |
| Profisee | Tous | Bon rapport qualite/prix, Microsoft ecosystem | Moins 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
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.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β 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.
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
| Fonctionnalite | Description | Valeur |
|---|---|---|
| Discovery | Recherche full-text et filtree de datasets, tables, colonnes | Trouver les donnees en secondes au lieu de jours |
| Documentation | Descriptions business, tags, glossaire, data owners | Comprendre les donnees sans appeler quelqu'un |
| Lineage | Visualisation du parcours des donnees source-to-target | Impact analysis, debugging, confiance |
| Profiling | Statistiques automatiques : distribution, completude, unicite | Evaluer la qualite avant utilisation |
| Access Control | Workflow de demande d'acces integre | Self-service securise |
| Social | Reviews, ratings, questions/reponses, annotations | Knowledge sharing, adoption |
| Usage Analytics | Qui utilise quoi, popularite, requetes frequentes | Identifier les datasets cles, les experts |
Comparaison des solutions de Data Catalog
| Critere | DataHub (LinkedIn) | Amundsen (Lyft) | Atlan | Collibra | Microsoft Purview |
|---|---|---|---|---|---|
| Type | Open-source | Open-source | SaaS | SaaS/On-prem | SaaS (Azure) |
| Lineage | Excellent | Basique | Excellent | Excellent | Bon (Azure-centric) |
| Search | Elasticsearch | Elasticsearch | AI-powered | Avance | Bon |
| Governance | Basique | Limitee | Bonne | Best-in-class | Bonne (Microsoft) |
| Connecteurs | 70+ | 30+ | 50+ | 80+ | 90+ (Azure bias) |
| UI/UX | Bonne | Correcte | Excellente | Corporate | Correcte |
| Adoption ease | Moyen | Moyen | Facile | Difficile | Facile si Azure |
| Prix | Gratuit + infra | Gratuit + infra | $$$ | $$$$ | $$ (inclus Azure) |
| Ideal pour | Equipes tech, startups | Petites equipes data | Modern data teams | Grandes entreprises | Ecosysteme 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 :
- Commencer petit : Documenter les 50 tables les plus utilisees (basees sur les query logs). Pas 5 000.
- 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)
- Gamifier : Tracker et celebrer les contributions (descriptions ajoutees, tags, reviews)
- Data Stewards comme seeders : Les 10 premiers stewards documentent les 50 premieres tables. L'effet boule de neige suit.
- 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 :
# 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
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.
| Article | Principe | Impact Architectural |
|---|---|---|
| Art. 5 | Minimisation des donnees | Ne collecter que le strict necessaire. Revoir chaque champ : est-il indispensable ? |
| Art. 6 | Base legale du traitement | Tracer la base legale de chaque traitement dans les metadonnees |
| Art. 15 | Droit d'acces | Pouvoir exporter toutes les donnees d'un individu en 30 jours |
| Art. 17 | Droit a l'effacement | Pouvoir supprimer toutes les donnees d'un individu de tous les systemes |
| Art. 20 | Portabilite | Exporter en format structure et lisible par machine (JSON, CSV) |
| Art. 25 | Privacy by design | Integrer la protection des donnees des la conception |
| Art. 30 | Registre des traitements | Maintenir un inventaire de tous les traitements de donnees personnelles |
| Art. 32 | Securite du traitement | Chiffrement, pseudonymisation, controle d'acces |
| Art. 33 | Notification de violation | Detecter et notifier une breach en 72h = monitoring en temps reel |
| Art. 35 | DPIA obligatoire | Analyse 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.
# 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.
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
-- 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 :
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
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 (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.
-- 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
| Critere | Star Schema | OBT | Activity Schema |
|---|---|---|---|
| Philosophie | Entity-centric, normalise | Pre-joined, denormalise | Event-centric, temporel |
| Structure | Facts + Dimensions | 1 table large | 1 table d'activites |
| JOINs | Beaucoup (fact-dim) | Aucun | Self-joins (temporels) |
| Flexibilite | Moyenne (schema fixe) | Faible (rebuild complet) | Elevee (ajouter activites) |
| Requetes temporelles | Complexe | Complexe | Natif (timeline built-in) |
| Self-service | Difficile pour non-tech | Facile | Moyen (concept a apprendre) |
| Performance | Bonne (avec index) | Excellente (columnar) | Bonne (partition par activity) |
| Cas d'usage ideal | DWH traditionnel, BI standard | Analytics self-service, ML features | Customer journey, product analytics, funnel |
| Complexite de build | Moyenne | Faible | Elevee (mapping des activites) |
| Maturite | 30+ ans, proven | 5-10 ans, populaire | 3-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 :
- Staging : Donnees brutes (raw)
- Intermediate : Star schema (facts + dimensions) pour les data engineers
- 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_namevscustomer_display_namevsbilling_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
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 :
- Extract : Connexion aux sources (bases relationnelles, fichiers plats, APIs) et extraction incrementale ou full des donnees
- Transform : Sur le serveur ETL, les donnees sont nettoyees, validees, enrichies, aggregees et formatees selon le schema cible
- 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
# 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) :
- Extract : Les connecteurs (Fivetran, Airbyte, Stitch) extraient les donnees des sources
- Load : Les donnees brutes sont chargees telles quelles dans une zone "raw" du warehouse
- 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
-- 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 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
| Critere | ETL | ELT | Recommandation |
|---|---|---|---|
| Volume de donnees | Limite par le serveur ETL (< 10 TB) | Scale avec le warehouse (PB+) | ELT si > 1 TB/jour |
| Latence requise | Minutes a heures (batch) | Secondes a minutes (micro-batch) | ELT pour near-real-time |
| Securite/Compliance | PII masquee avant stockage | PII dans le raw layer | ETL pour donnees tres sensibles |
| Competences equipe | Profils ETL specialises (Informatica, SSIS) | SQL + dbt (analytics engineers) | ELT si equipe SQL-first |
| Budget | Licence ETL + serveurs dedies (100K+/an) | Pay-per-query warehouse | ELT pour startups/PME |
| Agilite | Cycle de dev long (semaines) | Nouveau modele en heures | ELT pour equipes agiles |
| Legacy systems | Excellent support mainframe/SAP | Connecteurs SaaS/cloud | ETL pour migration legacy |
| Qualite donnees | Garantie avant chargement | Tests post-chargement (dbt tests) | Equivalent avec bons process |
| Auditabilite | Logs centralises du serveur ETL | Lineage dbt + warehouse audit | ELT avec dbt meilleur lineage |
| Re-traitement | Relancer le pipeline complet | Re-run SQL sur donnees brutes | ELT 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
| Outil | Type | Forces | Prix | Cas d'usage |
|---|---|---|---|---|
| Informatica | ETL | Entreprise, 1000+ connecteurs | $$$$ (100K+/an) | Grands groupes, legacy |
| Talend | ETL/ELT | Open-source + enterprise | $$ - $$$$ | Mid-market |
| SSIS | ETL | Integre a SQL Server | $ (licence SQL) | Ecosysteme Microsoft |
| Fivetran | EL (Extract-Load) | 300+ connecteurs managees | $$ - $$$ | SaaS extraction |
| Airbyte | EL | Open-source, 400+ connecteurs | Gratuit - $$ | Startups, self-hosted |
| dbt | T (Transform) | SQL versionne, tests, docs | Gratuit - $$ | Transformation in-warehouse |
| Apache Spark | ETL/ELT | Big data, ML integre | Gratuit (compute) | Data engineering avance |
| AWS Glue | ETL/ELT | Serverless, integre AWS | Pay-per-use | Ecosysteme AWS |
| Azure Data Factory | ETL/ELT | Orchestrateur hybrid | Pay-per-use | Ecosysteme Azure |
| Google Dataform | T | Integre BigQuery | Inclus BigQuery | Ecosysteme 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 docsetdbt testdans 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 ?
Dans quel scenario l'ETL traditionnel reste-t-il preferable ?
Quel outil est specialise dans la partie "Transform" de l'ELT ?
17. Lambda & Kappa Architecture
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
+------------------------------------------+
| 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.
+----------+ +------------------------------------------+
| | | 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
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 ?
Quel est le principal avantage de l'architecture Kappa par rapport a Lambda ?
Comment l'architecture Kappa gere-t-elle le retraitement historique ?
18. Medallion Architecture
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
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
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
-- 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
-- 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 :
// 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"
}
// 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"
}
// 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 ?
Quelle transformation est typiquement effectuee dans la couche Silver ?
Pourquoi la couche Bronze doit-elle etre "append-only" ?
19. Data Mesh
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 - 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
| Caracteristique | Description | Exemple |
|---|---|---|
| Decouvrabilite | Facile a trouver dans un catalogue | Reference dans le data catalog |
| Adressabilite | Accessible via une interface standard | API, table partagee, event stream |
| Fiabilite | SLA de disponibilite et fraicheur | "Rafraichi avant 6h, 99.9% uptime" |
| Interoperabilite | Compatible avec les autres data products | Schemas standardises, identifiants communs |
| Securite | Controle d'acces et compliance | RBAC, masquage PII, audit logs |
| Documentation | Description, schema, exemples | Data contract YAML, README |
| Qualite | Metriques de qualite mesurees | Completude > 99%, 0 doublons |
# 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 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 ?
| Dimension | Niveau 1 (Pas pret) | Niveau 2 (En chemin) | Niveau 3 (Pret) |
|---|---|---|---|
| Organisation | Equipe data unique et centralisee | Quelques data engineers dans les domaines | Chaque domaine a une equipe data autonome |
| Culture | "Les donnees c'est le probleme de la data team" | Les domaines s'interessent a leurs donnees | Les domaines traitent les donnees comme un produit |
| Plateforme | Infrastructure artisanale, cas par cas | Quelques outils partages (catalog, CI/CD) | Plateforme self-serve mature |
| Gouvernance | Pas de standards, chacun fait sa sauce | Quelques conventions documentees | Standards automatises et respectes |
| Taille | < 50 personnes data/tech | 50-200 personnes | 200+ personnes, 5+ domaines data |
| Data literacy | Seuls les data analysts comprennent les donnees | Les PO comprennent leurs metriques | Les 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 ?
Quel est le prerequis organisationnel le plus important pour adopter le Data Mesh ?
Qu'est-ce qu'un "Data Contract" dans le contexte du Data Mesh ?
20. Data Fabric & Semantic Layer
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 | +------------------------------------------------------------------+ | | | +------------------------------------------------------------+ | | | 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.
# 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 ?
- L'utilisateur ecrit une requete SQL contre une vue virtuelle
- Le moteur de virtualisation decompose la requete en sous-requetes pour chaque source
- Chaque sous-requete est envoyee a la source appropriee (Snowflake, PostgreSQL, API REST...)
- Les resultats sont assembles et retournes a l'utilisateur comme s'il s'agissait d'une seule table
-- 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
| Outil | Type | Forces | Prix |
|---|---|---|---|
| Denodo | Enterprise | Leader Gartner, 200+ connecteurs | $$$$ |
| Dremio | Open-core | Lakehouse natif, Apache Arrow | $$ - $$$ |
| Starburst (Trino) | Open-source | SQL federe, performant | Gratuit - $$$ |
| Databricks Unity Catalog | Platform | Integre lakehouse | Inclus |
| Google BigQuery Omni | Cloud | Multi-cloud, BigQuery SQL | Pay-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
# 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
| Critere | Data Mesh | Data Fabric |
|---|---|---|
| Nature | Paradigme organisationnel | Approche technologique |
| Focus | Qui possede les donnees ? | Comment connecter les donnees ? |
| Decentralisation | Propriete decentralisee par domaine | Acces unifie, sources distribuees |
| Gouvernance | Federee (standards globaux, execution locale) | Centralisee, augmentee par l'IA |
| Role de l'IA | Secondaire (automatisation CI/CD) | Central (classification, lineage, recommandation) |
| Metadonnees | Data contracts par data product | Knowledge graph actif, metadata-driven |
| Changement requis | Organisationnel majeur (restructuration equipes) | Technologique (integration layer) |
| Pre-requis | Culture data-driven, domaines clairs, 200+ pers. | Budget pour outils enterprise |
| Scalabilite | Scale avec le nombre de domaines | Scale avec le nombre de sources |
| Complementarite | Les deux sont complementaires ! Data Mesh pour l'organisation + Data Fabric pour la technologie | |
| Ideal pour | Grandes entreprises avec domaines metier autonomes | Entreprises avec sources heterogenes complexes |
| Promoteur | Zhamak Dehghani / ThoughtWorks | Gartner |
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 ?
Quelle est la principale difference entre Data Mesh et Data Fabric ?
Quel probleme la Semantic Layer resout-elle ?
21. Outils de Modelisation
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.
| Outil | Type | Prix/mois | Collaboration | Forward/Reverse Eng. | Cloud/Desktop | Connecteurs DB | Export | Ideal pour |
|---|---|---|---|---|---|---|---|---|
| ERwin | Enterprise | $500+/user | Multi-user | Oui/Oui | Desktop + Server | 50+ | DDL, PDF, HTML | Grands groupes, compliance |
| dbdiagram.io | Code-first | Gratuit - $15 | Partage liens | DBML/Oui | Cloud | Export SQL | SQL, PDF, PNG | Startups, documentation |
| dbt + docs | Code-first | Gratuit - $$ | Git native | Non/Lineage | CLI + Cloud | DWH cloud | HTML site | Analytics engineering |
| SqlDBM | Cloud native | Gratuit - $29 | Teams | Oui/Oui | Cloud | 15+ | DDL, PDF | Equipes cloud-first |
| DrawSQL | Visuel leger | Gratuit - $19 | Partage | Non/Import | Cloud | Import SQL | PNG, SQL | Prototypage rapide |
| Lucidchart | Diagramme | $8 - $15 | Temps reel | Import/Non | Cloud | Import ERD | PNG, PDF, Visio | Communication, presentations |
| PowerDesigner (SAP) | Enterprise | $$$ | Repository | Oui/Oui | Desktop | 40+ | DDL, XML | Ecosysteme SAP |
| Vertabelo | Cloud | Gratuit - $39 | Teams | Oui/Oui | Cloud | 10+ | DDL, PDF, PNG | PME, enseignement |
| Moon Modeler | Desktop | $50 one-time | Non | Oui/Oui | Desktop | NoSQL + SQL | Script, PNG | NoSQL modeling |
| SchemaSpy | Doc auto | Gratuit (OSS) | HTML gen | Non/Oui | CLI | JDBC | HTML site | Documentation 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
// ===========================================
// 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.
# 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)
# 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
| Critere | Poids | Questions a poser |
|---|---|---|
| Budget | Haut | Licence/user ou flat ? Open-source possible ? |
| Collaboration | Haut | Edition simultanee ? Commentaires ? Review workflow ? |
| Forward Engineering | Moyen | Generation de DDL pour votre SGBD cible ? |
| Reverse Engineering | Haut | Import du schema existant depuis la DB ? |
| Versioning | Haut | Integration Git ? Historique des modifications ? |
| Export | Moyen | PDF, PNG, SQL, XML, Visio ? API ? |
| Integration CI/CD | Moyen | CLI ? API REST ? Webhooks ? |
| Lineage | Moyen | Visualisation des dependances entre tables ? |
| NoSQL support | Bas* | MongoDB, Cassandra, DynamoDB ? |
| SSO / Admin | Haut* | 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 ?
Quel outil genere automatiquement une documentation web avec lineage a partir de modeles SQL ?
Pour un grand groupe avec des exigences de compliance et 100+ utilisateurs, quel type d'outil est le plus adapte ?
22. Projet - Data Platform Design
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
| Besoin | Stakeholder | Priorite | Contrainte associee |
|---|---|---|---|
| Dashboard executif (MRR, churn) | CEO | P0 | Rafraichissement quotidien, 99.5% uptime |
| Conformite HDS + RGPD | Compliance | P0 | Chiffrement, audit trail, droit effacement |
| Parcours de soins | Dir. Medicale | P0 | Donnees de sante, retention 20 ans |
| A/B testing & funnel | VP Product | P1 | Quasi temps reel (< 5 min latence) |
| Feature store ML | Data Science | P1 | Freshness variable selon les features |
| Analyse IoT predictive | Dir. Medicale | P2 | Volume 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 :
# 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 standardfact_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 :
| Composant | Outil choisi | Justification | Cout/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 min : Resumee de l'architecture choisie et pourquoi
- 1 min : Modele de donnees et couches
- 1 min : Gouvernance et conformite HDS/RGPD
- 1 min : Budget et stack technologique
- 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)