๐Ÿ—๏ธ Data Mesh & Data Contracts

Bienvenue dans ce module oรน tu vas dรฉcouvrir les architectures Data Mesh et les Data Contracts โ€” deux concepts essentiels pour scaler les organisations data. Tu apprendras ร  passer dโ€™une architecture centralisรฉe ร  une approche dรฉcentralisรฉe oรน chaque domaine est responsable de ses donnรฉes.


Prรฉrequis

Niveau Compรฉtence
โœ… Requis Data Lakehouse (M20)
โœ… Requis Data Quality (M23)
โœ… Requis Orchestration (M22, M28)
๐Ÿ’ก Recommandรฉ Expรฉrience en organisation data

๐ŸŽฏ Objectifs du module

ร€ la fin de ce module, tu seras capable de :

  • Comprendre les 4 principes du Data Mesh
  • Concevoir des Data Products avec ownership clair
  • ร‰crire des Data Contracts complets
  • Implรฉmenter la validation de contracts avec Soda
  • Configurer DataHub comme Data Catalog
  • Gรฉrer la Schema Evolution sans casser les consommateurs
  • Mettre en place une gouvernance fรฉdรฉrรฉe

1. Introduction au Data Mesh

1.1 Problรจmes de lโ€™Architecture Centralisรฉe

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    ARCHITECTURE CENTRALISร‰E (MONOLITHE)                     โ”‚
โ”‚                                                                             โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                                                               โ”‚
โ”‚   โ”‚ Sales   โ”‚โ”€โ”€โ”                                                            โ”‚
โ”‚   โ”‚ Domain  โ”‚  โ”‚                                                            โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”        โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚      โ”‚                  โ”‚      โ”‚                 โ”‚        โ”‚
โ”‚   โ”‚Marketingโ”‚โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ–ถโ”‚  Central Data    โ”‚โ”€โ”€โ”€โ”€โ”€โ–ถโ”‚   Data Lake/    โ”‚        โ”‚
โ”‚   โ”‚ Domain  โ”‚  โ”‚      โ”‚     Team         โ”‚      โ”‚   Warehouse     โ”‚        โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚      โ”‚                  โ”‚      โ”‚                 โ”‚        โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚      โ”‚  (bottleneck!)   โ”‚      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜        โ”‚
โ”‚   โ”‚ Finance โ”‚โ”€โ”€โ”˜      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                                  โ”‚
โ”‚   โ”‚ Domain  โ”‚                                                               โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                                                               โ”‚
โ”‚                                                                             โ”‚
โ”‚   PROBLรˆMES :                                                               โ”‚
โ”‚   โŒ ร‰quipe data = bottleneck (tout passe par eux)                          โ”‚
โ”‚   โŒ Pas de ownership clair ("c'est pas mes donnรฉes")                       โ”‚
โ”‚   โŒ Time-to-market lent (file d'attente de demandes)                       โ”‚
โ”‚   โŒ ร‰quipe data ne connaรฎt pas le contexte mรฉtier                          โ”‚
โ”‚   โŒ Scalabilitรฉ organisationnelle limitรฉe                                  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

1.2 Les 4 Principes du Data Mesh

Le Data Mesh est une approche architecturale proposรฉe par Zhamak Dehghani (Thoughtworks) en 2019.

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    LES 4 PRINCIPES DU DATA MESH                             โ”‚
โ”‚                                                                             โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚   โ”‚  1๏ธโƒฃ DOMAIN OWNERSHIP                                                 โ”‚  โ”‚
โ”‚   โ”‚     Chaque domaine mรฉtier est responsable de ses donnรฉes             โ”‚  โ”‚
โ”‚   โ”‚     โ†’ Sales gรจre les donnรฉes sales, Marketing gรจre les donnรฉes mktg โ”‚  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚                                                                             โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚   โ”‚  2๏ธโƒฃ DATA AS A PRODUCT                                                โ”‚  โ”‚
โ”‚   โ”‚     Les donnรฉes sont traitรฉes comme un produit avec des clients      โ”‚  โ”‚
โ”‚   โ”‚     โ†’ SLOs, documentation, support, qualitรฉ                          โ”‚  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚                                                                             โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚   โ”‚  3๏ธโƒฃ SELF-SERVE DATA PLATFORM                                         โ”‚  โ”‚
โ”‚   โ”‚     Une plateforme qui permet aux domaines d'รชtre autonomes          โ”‚  โ”‚
โ”‚   โ”‚     โ†’ Infra, outils, templates, pas besoin de l'รฉquipe centrale      โ”‚  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚                                                                             โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚   โ”‚  4๏ธโƒฃ FEDERATED COMPUTATIONAL GOVERNANCE                               โ”‚  โ”‚
โ”‚   โ”‚     Gouvernance dรฉcentralisรฉe avec standards globaux                 โ”‚  โ”‚
โ”‚   โ”‚     โ†’ Policies automatisรฉes, interopรฉrabilitรฉ, compliance            โ”‚  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

1.3 Data Mesh vs Data Lake vs Data Lakehouse

Aspect Data Lake Data Lakehouse Data Mesh
Type Architecture technique Architecture technique Architecture organisationnelle
Focus Stockage Stockage + Analytics Organisation + Ownership
Centralisation Centralisรฉ Centralisรฉ Dรฉcentralisรฉ
Ownership ร‰quipe data ร‰quipe data Domaines mรฉtier
Compatibilitรฉ โ€” โ€” Peut utiliser Lakehouse underneath

โš ๏ธ Important : Data Mesh nโ€™est PAS une technologie, cโ€™est une approche organisationnelle. Tu peux implรฉmenter un Data Mesh avec un Data Lakehouse comme infrastructure.

1.4 Quand Adopter le Data Mesh ?

โœ… Data Mesh est adaptรฉ si : - Organisation large (>100 personnes dans la data) - Plusieurs domaines mรฉtier distincts - ร‰quipe data centrale = bottleneck avรฉrรฉ - Domaines ont des รฉquipes techniques capables - Culture dโ€™ownership et dโ€™autonomie

โŒ Data Mesh nโ€™est PAS adaptรฉ si : - Petite organisation (<20 personnes data) - Un seul domaine mรฉtier - Pas assez de maturitรฉ technique dans les domaines - Besoin de contrรดle centralisรฉ fort - Ressources limitรฉes pour la plateforme


2. Domain Ownership & Data Products

2.1 Identifier les Domaines

Un domaine correspond gรฉnรฉralement ร  un bounded context (DDD - Domain-Driven Design).

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    EXEMPLE : E-COMMERCE                                     โ”‚
โ”‚                                                                             โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚   โ”‚   ORDERS    โ”‚   โ”‚  CUSTOMERS  โ”‚   โ”‚  PRODUCTS   โ”‚   โ”‚  MARKETING  โ”‚   โ”‚
โ”‚   โ”‚   Domain    โ”‚   โ”‚   Domain    โ”‚   โ”‚   Domain    โ”‚   โ”‚   Domain    โ”‚   โ”‚
โ”‚   โ”‚             โ”‚   โ”‚             โ”‚   โ”‚             โ”‚   โ”‚             โ”‚   โ”‚
โ”‚   โ”‚ - orders    โ”‚   โ”‚ - customers โ”‚   โ”‚ - products  โ”‚   โ”‚ - campaigns โ”‚   โ”‚
โ”‚   โ”‚ - payments  โ”‚   โ”‚ - addresses โ”‚   โ”‚ - inventory โ”‚   โ”‚ - emails    โ”‚   โ”‚
โ”‚   โ”‚ - refunds   โ”‚   โ”‚ - segments  โ”‚   โ”‚ - pricing   โ”‚   โ”‚ - analytics โ”‚   โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                                                                             โ”‚
โ”‚   Chaque domaine :                                                          โ”‚
โ”‚   โœ“ A son รฉquipe dรฉdiรฉe                                                    โ”‚
โ”‚   โœ“ Possรจde ses donnรฉes                                                    โ”‚
โ”‚   โœ“ Expose des Data Products                                               โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

2.2 Quโ€™est-ce quโ€™un Data Product ?

Un Data Product est un ensemble de donnรฉes exposรฉ par un domaine pour รชtre consommรฉ par dโ€™autres.

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                         DATA PRODUCT                                        โ”‚
โ”‚                                                                             โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚   โ”‚                      orders_fact                                    โ”‚  โ”‚
โ”‚   โ”‚                                                                     โ”‚  โ”‚
โ”‚   โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”              โ”‚  โ”‚
โ”‚   โ”‚   โ”‚   DATA      โ”‚   โ”‚   CODE      โ”‚   โ”‚  METADATA   โ”‚              โ”‚  โ”‚
โ”‚   โ”‚   โ”‚             โ”‚   โ”‚             โ”‚   โ”‚             โ”‚              โ”‚  โ”‚
โ”‚   โ”‚   โ”‚ Delta Table โ”‚   โ”‚ Spark Jobs  โ”‚   โ”‚ Schema      โ”‚              โ”‚  โ”‚
โ”‚   โ”‚   โ”‚ (storage)   โ”‚   โ”‚ Airflow DAG โ”‚   โ”‚ Contract    โ”‚              โ”‚  โ”‚
โ”‚   โ”‚   โ”‚             โ”‚   โ”‚ dbt models  โ”‚   โ”‚ SLOs        โ”‚              โ”‚  โ”‚
โ”‚   โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚ Docs        โ”‚              โ”‚  โ”‚
โ”‚   โ”‚                                       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜              โ”‚  โ”‚
โ”‚   โ”‚                                                                     โ”‚  โ”‚
โ”‚   โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚  โ”‚
โ”‚   โ”‚   โ”‚                    OUTPUT PORTS                             โ”‚  โ”‚  โ”‚
โ”‚   โ”‚   โ”‚   SQL (Snowflake) โ”‚ API (REST) โ”‚ File (S3) โ”‚ Stream (Kafka) โ”‚  โ”‚  โ”‚
โ”‚   โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚                                                                             โ”‚
โ”‚   Owner: orders-team@company.com                                           โ”‚
โ”‚   SLA: 99.9% availability, <1h freshness                                   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

2.3 Caractรฉristiques dโ€™un Bon Data Product (DATSIS)

Caractรฉristique Description Exemple
Discoverable Facile ร  trouver Rรฉfรฉrencรฉ dans DataHub
Addressable Accรจs standardisรฉ snowflake://prod.orders.orders_fact
Trustworthy Qualitรฉ garantie SLOs, tests automatisรฉs
Self-describing Documentation complรจte Schema, descriptions, exemples
Interoperable Standards communs Formats, naming conventions
Secure Accรจs contrรดlรฉ RBAC, encryption, audit

2.4 ร‰quipe Data Product

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    ร‰QUIPE DATA PRODUCT (par domaine)                        โ”‚
โ”‚                                                                             โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚   โ”‚                                                                     โ”‚  โ”‚
โ”‚   โ”‚   Product Owner โ”€โ”€โ”€ Dรฉfinit les prioritรฉs, roadmap                  โ”‚  โ”‚
โ”‚   โ”‚        โ”‚                                                            โ”‚  โ”‚
โ”‚   โ”‚        โ”œโ”€โ”€ Data Engineer โ”€โ”€โ”€ Pipelines, infrastructure              โ”‚  โ”‚
โ”‚   โ”‚        โ”‚                                                            โ”‚  โ”‚
โ”‚   โ”‚        โ”œโ”€โ”€ Analytics Engineer โ”€โ”€โ”€ Modรจles, transformations          โ”‚  โ”‚
โ”‚   โ”‚        โ”‚                                                            โ”‚  โ”‚
โ”‚   โ”‚        โ””โ”€โ”€ Domain Expert โ”€โ”€โ”€ Connaissances mรฉtier, validation       โ”‚  โ”‚
โ”‚   โ”‚                                                                     โ”‚  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚                                                                             โ”‚
โ”‚   Responsabilitรฉs :                                                         โ”‚
โ”‚   โœ“ Dรฉvelopper et maintenir les Data Products du domaine                   โ”‚
โ”‚   โœ“ Garantir la qualitรฉ (SLOs)                                             โ”‚
โ”‚   โœ“ Supporter les consommateurs                                            โ”‚
โ”‚   โœ“ Documenter et communiquer les changements                              โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

3. Self-Serve Data Platform

3.1 Rรดle de la Plateforme

La plateforme est un enabler, pas un bottleneck. Elle fournit les outils pour que les domaines soient autonomes.

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    SELF-SERVE DATA PLATFORM                                 โ”‚
โ”‚                                                                             โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚   โ”‚                    DOMAIN TEAMS                                     โ”‚  โ”‚
โ”‚   โ”‚   Orders โ”‚ Customers โ”‚ Products โ”‚ Marketing โ”‚ Finance              โ”‚  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚                                โ”‚                                            โ”‚
โ”‚                                โ–ผ                                            โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚   โ”‚                    PLATFORM SERVICES                                โ”‚  โ”‚
โ”‚   โ”‚                                                                     โ”‚  โ”‚
โ”‚   โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                โ”‚  โ”‚
โ”‚   โ”‚   โ”‚ Data Productโ”‚  โ”‚   Data      โ”‚  โ”‚   Access    โ”‚                โ”‚  โ”‚
โ”‚   โ”‚   โ”‚  Templates  โ”‚  โ”‚  Catalog    โ”‚  โ”‚ Management  โ”‚                โ”‚  โ”‚
โ”‚   โ”‚   โ”‚             โ”‚  โ”‚  (DataHub)  โ”‚  โ”‚   (RBAC)    โ”‚                โ”‚  โ”‚
โ”‚   โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                โ”‚  โ”‚
โ”‚   โ”‚                                                                     โ”‚  โ”‚
โ”‚   โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                โ”‚  โ”‚
โ”‚   โ”‚   โ”‚   Quality   โ”‚  โ”‚ Observabilityโ”‚  โ”‚  Contract  โ”‚                โ”‚  โ”‚
โ”‚   โ”‚   โ”‚   (Soda)    โ”‚  โ”‚ (Monitoring) โ”‚  โ”‚ Validation โ”‚                โ”‚  โ”‚
โ”‚   โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                โ”‚  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚                                โ”‚                                            โ”‚
โ”‚                                โ–ผ                                            โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚   โ”‚                    INFRASTRUCTURE                                   โ”‚  โ”‚
โ”‚   โ”‚   Compute (Spark) โ”‚ Storage (S3/Delta) โ”‚ Orchestration (Airflow)   โ”‚  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

3.2 Composants Essentiels

Composant Fonction Outils
Infrastructure Compute, storage, networking Kubernetes, S3, Snowflake
Templates Bootstrapper un Data Product Cookiecutter, Backstage
Catalog Dรฉcouverte, lineage, metadata DataHub, OpenMetadata, Atlan
Access Management RBAC, policies Unity Catalog, Ranger
Quality Tests, monitoring Soda, Great Expectations
Observability Mรฉtriques, alertes Datadog, Monte Carlo

3.3 Technologies de Data Catalog

Outil Type Points forts
DataHub Open Source Lineage, search, extensible
OpenMetadata Open Source UI moderne, collaboration
Atlan Commercial UX, collaboration, governance
Unity Catalog Databricks Intรฉgrรฉ Databricks, ACL
AWS Glue Catalog AWS Intรฉgrรฉ AWS, serverless

4. Data Contracts

4.1 Pourquoi les Data Contracts ?

Sans contracts, cโ€™est le chaos :

โŒ SANS DATA CONTRACT :

Producer: "J'ai renommรฉ la colonne 'user_id' en 'customer_id', c'รฉtait plus clair."
Consumer: "Tu as cassรฉ tous nos dashboards !" ๐Ÿ˜ก
Producer: "C'est pas ma faute si vous dรฉpendez de mes donnรฉes sans me prรฉvenir."

โœ… AVEC DATA CONTRACT :

Producer: "Je veux renommer 'user_id' en 'customer_id'."
Contract: "Breaking change dรฉtectรฉ. 3 consommateurs impactรฉs."
Producer: "OK, je crรฉe une nouvelle version avec pรฉriode de deprecation."

4.2 Anatomie dโ€™un Data Contract

Un Data Contract dรฉfinit lโ€™interface entre un producteur et ses consommateurs.

Voir le code
# Exemple de Data Contract complet (YAML)

data_contract_yaml = """
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
# DATA CONTRACT : orders_fact
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•

dataContractSpecification: 0.9.3
id: orders-domain.orders-fact

# โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
# INFO : Mรฉtadonnรฉes gรฉnรฉrales
# โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
info:
  title: Orders Fact Table
  version: 1.0.0
  status: active  # draft | active | deprecated | retired
  description: |
    Table de faits contenant toutes les commandes.
    Une ligne par commande. Mise ร  jour en near real-time.
  owner: orders-team@company.com
  contact:
    slack: "#orders-data"
    oncall: "https://pagerduty.com/orders-data"

# โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
# SCHEMA : Structure des donnรฉes
# โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
schema:
  type: table
  fields:
    - name: order_id
      type: string
      required: true
      unique: true
      description: Identifiant unique de la commande (UUID v4)
      example: "550e8400-e29b-41d4-a716-446655440000"
      pii: false
      
    - name: customer_id
      type: string
      required: true
      description: Rรฉfรฉrence au domaine customers
      pii: true
      
    - name: order_date
      type: timestamp
      required: true
      description: Date et heure de la commande (UTC)
      
    - name: amount
      type: decimal(10,2)
      required: true
      description: Montant total en EUR
      constraints:
        minimum: 0
        maximum: 1000000
        
    - name: status
      type: string
      required: true
      description: Statut actuel de la commande
      enum:
        - pending
        - confirmed
        - shipped
        - delivered
        - cancelled
        
    - name: shipping_country
      type: string
      required: false
      description: Code pays ISO 3166-1 alpha-2
      pattern: "^[A-Z]{2}$"

# โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
# SEMANTICS : Signification mรฉtier
# โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
semantics:
  granularity: one row per order
  temporality: event time (order_date)
  updateFrequency: near real-time (< 15 min)
  businessRules:
    - "amount = somme des lignes + taxes - remises"
    - "Les commandes annulรฉes restent dans la table (status=cancelled)"
    - "order_date est en UTC, pas en heure locale"

# โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
# QUALITY : SLOs de qualitรฉ
# โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
quality:
  freshness:
    threshold: 1 hour
    column: order_date
    
  completeness:
    - column: order_id
      threshold: 100%
    - column: customer_id
      threshold: 100%
    - column: amount
      threshold: 99.9%
      
  validity:
    - column: amount
      rule: ">= 0"
      threshold: 100%
    - column: status
      rule: "in enum values"
      threshold: 100%
      
  uniqueness:
    - column: order_id
      threshold: 100%

# โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
# SLA : Service Level Agreements
# โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
sla:
  availability: 99.9%
  latency: "< 5 minutes from source"
  retention: 7 years
  supportHours: "24/7"
  incidentResponse: "< 1 hour"

# โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
# ACCESS : Qui peut accรฉder
# โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
access:
  classification: internal
  location: "snowflake://prod.orders.orders_fact"
  consumers:
    - team: analytics
      purpose: dashboards
    - team: marketing
      purpose: segmentation
    - team: finance
      purpose: revenue reporting
"""

print("๐Ÿ“„ Data Contract Example:")
print(data_contract_yaml)

4.3 DataContract CLI (Open Source)

# Installation
pip install datacontract-cli

# Initialiser un nouveau contract
datacontract init orders-fact

# Valider la syntaxe
datacontract lint datacontract.yaml

# Tester contre des donnรฉes rรฉelles
datacontract test datacontract.yaml \
  --source snowflake://prod.orders.orders_fact

# Gรฉnรฉrer la documentation HTML
datacontract export datacontract.yaml --format html > docs/orders.html

# Dรฉtecter les breaking changes
datacontract diff v1/datacontract.yaml v2/datacontract.yaml

4.4 Validation avec Soda

Voir le code
# Soda checks gรฉnรฉrรฉs depuis le Data Contract

soda_checks_yaml = """
# soda_checks.yaml
# Gรฉnรฉrรฉ depuis le Data Contract orders-domain.orders-fact

checks for orders_fact:
  # โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  # Freshness : donnรฉes < 1 heure
  # โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  - freshness(order_date) < 1h:
      name: "Data freshness SLO"
      fail: when > 1h
      warn: when > 30m

  # โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  # Completeness : pas de nulls sur colonnes required
  # โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  - missing_count(order_id) = 0:
      name: "order_id completeness"
      
  - missing_count(customer_id) = 0:
      name: "customer_id completeness"
      
  - missing_percent(amount) < 0.1:
      name: "amount completeness (99.9%)"

  # โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  # Validity : valeurs dans les plages attendues
  # โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  - invalid_count(amount) = 0:
      name: "amount must be >= 0"
      valid min: 0
      
  - invalid_count(status) = 0:
      name: "status must be in enum"
      valid values: [pending, confirmed, shipped, delivered, cancelled]
      
  - invalid_count(shipping_country) = 0:
      name: "shipping_country format"
      valid regex: "^[A-Z]{2}$"

  # โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  # Uniqueness : pas de doublons
  # โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  - duplicate_count(order_id) = 0:
      name: "order_id uniqueness"

  # โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  # Volume : anomaly detection
  # โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  - anomaly detection for row_count:
      name: "Volume anomaly detection"
      warn: when diff > 20%
      fail: when diff > 50%
"""

print("โœ… Soda Checks (from Data Contract):")
print(soda_checks_yaml)

4.5 Exรฉcuter Soda

# Installation
pip install soda-core-spark  # ou soda-core-snowflake, soda-core-postgres

# Configuration (soda_config.yaml)
# data_source my_warehouse:
#   type: snowflake
#   account: mycompany.us-east-1
#   username: ${SNOWFLAKE_USER}
#   password: ${SNOWFLAKE_PASSWORD}
#   database: PROD
#   schema: ORDERS

# Exรฉcuter les checks
soda scan -d my_warehouse -c soda_config.yaml soda_checks.yaml

# Rรฉsultat :
# Scan summary:
# 8/8 checks PASSED
# 0 checks WARNED
# 0 checks FAILED

4.6 Contract Validation dans CI/CD

# .github/workflows/contract-validation.yaml
name: Data Contract Validation

on:
  push:
    paths:
      - 'contracts/**'
  schedule:
    - cron: '0 * * * *'  # Toutes les heures

jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Install tools
        run: pip install datacontract-cli soda-core
        
      - name: Lint contracts
        run: datacontract lint contracts/*.yaml
        
      - name: Check for breaking changes
        run: |
          datacontract diff contracts/orders.yaml \
            --against main:contracts/orders.yaml
            
      - name: Run Soda checks
        run: soda scan -d warehouse soda_checks.yaml
        
      - name: Alert on failure
        if: failure()
        run: |
          curl -X POST $SLACK_WEBHOOK \
            -d '{"text": "๐Ÿšจ Data Contract validation failed!"}'

5. Schema Evolution & Versioning

5.1 Breaking vs Non-Breaking Changes

Type de changement Breaking ? Action recommandรฉe
Ajouter colonne nullable โŒ Non โœ… OK direct
Ajouter colonne required โœ… Oui Nouvelle version majeure
Renommer colonne โœ… Oui Deprecation + alias
Changer type (ex: stringโ†’int) โœ… Oui Nouvelle version majeure
Supprimer colonne โœ… Oui Deprecation period (30-90 jours)
Changer enum (ajouter valeur) โš ๏ธ Dรฉpend Prรฉvenir les consommateurs
Changer contrainte (min/max) โš ๏ธ Dรฉpend Prรฉvenir les consommateurs

5.2 Stratรฉgies de Versioning

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    SEMANTIC VERSIONING                                      โ”‚
โ”‚                                                                             โ”‚
โ”‚                         MAJOR.MINOR.PATCH                                   โ”‚
โ”‚                           โ”‚     โ”‚     โ”‚                                     โ”‚
โ”‚                           โ”‚     โ”‚     โ””โ”€โ”€ Bug fixes, no schema change       โ”‚
โ”‚                           โ”‚     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ New features, backward compatible โ”‚
โ”‚                           โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Breaking changes                  โ”‚
โ”‚                                                                             โ”‚
โ”‚   Exemples :                                                                โ”‚
โ”‚   1.0.0 โ†’ 1.0.1 : Fix bug dans calcul                                      โ”‚
โ”‚   1.0.1 โ†’ 1.1.0 : Ajout colonne nullable                                   โ”‚
โ”‚   1.1.0 โ†’ 2.0.0 : Renommage colonne (breaking)                             โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

5.3 Backward vs Forward Compatibility

Type Description Qui peut lire quoi
Backward Nouveau code lit ancien format โœ… v2 reader โ†’ v1 data
Forward Ancien code lit nouveau format โœ… v1 reader โ†’ v2 data
Full Les deux โœ… Best practice

5.4 Processus de Deprecation

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    PROCESSUS DE DEPRECATION                                 โ”‚
โ”‚                                                                             โ”‚
โ”‚   Jour 0          Jour 30         Jour 60         Jour 90                  โ”‚
โ”‚     โ”‚               โ”‚               โ”‚               โ”‚                       โ”‚
โ”‚     โ–ผ               โ–ผ               โ–ผ               โ–ผ                       โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”         โ”Œโ”€โ”€โ”€โ”€โ”€โ”         โ”Œโ”€โ”€โ”€โ”€โ”€โ”         โ”Œโ”€โ”€โ”€โ”€โ”€โ”                  โ”‚
โ”‚   โ”‚Annonceโ”‚โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”‚Rappelโ”‚โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”‚Warningโ”‚โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”‚Removeโ”‚                  โ”‚
โ”‚   โ”‚       โ”‚       โ”‚      โ”‚        โ”‚       โ”‚       โ”‚      โ”‚                  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”˜         โ””โ”€โ”€โ”€โ”€โ”€โ”˜         โ””โ”€โ”€โ”€โ”€โ”€โ”˜         โ””โ”€โ”€โ”€โ”€โ”€โ”˜                  โ”‚
โ”‚                                                                             โ”‚
โ”‚   โ€ข Annoncer la deprecation dans le contract                               โ”‚
โ”‚   โ€ข Notifier tous les consommateurs                                        โ”‚
โ”‚   โ€ข Fournir un guide de migration                                          โ”‚
โ”‚   โ€ข Logger les accรจs ร  la colonne deprecated                               โ”‚
โ”‚   โ€ข Supprimer aprรจs la pรฉriode                                             โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

5.5 Exemple de Deprecation dans le Contract

schema:
  fields:
    - name: user_id
      type: string
      deprecated: true
      deprecationDate: "2024-01-15"
      removalDate: "2024-04-15"
      replacedBy: customer_id
      description: "[DEPRECATED] Use customer_id instead"
      
    - name: customer_id
      type: string
      required: true
      description: "Unique customer identifier (replaces user_id)"

6. Data Catalog & Discovery

6.1 Pourquoi un Data Catalog ?

Problรจme Solution Catalog
โ€œOรน trouver les donnรฉes clients ?โ€ Search
โ€œDโ€™oรน viennent ces donnรฉes ?โ€ Lineage
โ€œQui est responsable de cette table ?โ€ Ownership
โ€œCette colonne contient quoi exactement ?โ€ Documentation
โ€œLes donnรฉes sont-elles fiables ?โ€ Quality scores

6.2 Types de Metadata

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    TYPES DE METADATA                                        โ”‚
โ”‚                                                                             โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚   โ”‚  TECHNICAL METADATA                                                 โ”‚  โ”‚
โ”‚   โ”‚  โ€ข Schema (colonnes, types)                                         โ”‚  โ”‚
โ”‚   โ”‚  โ€ข Lineage (sources, transformations)                               โ”‚  โ”‚
โ”‚   โ”‚  โ€ข Partitioning, format, location                                   โ”‚  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚                                                                             โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚   โ”‚  BUSINESS METADATA                                                  โ”‚  โ”‚
โ”‚   โ”‚  โ€ข Descriptions, dรฉfinitions                                        โ”‚  โ”‚
โ”‚   โ”‚  โ€ข Ownership, contact                                               โ”‚  โ”‚
โ”‚   โ”‚  โ€ข Business glossary terms                                          โ”‚  โ”‚
โ”‚   โ”‚  โ€ข Classification (PII, confidential)                               โ”‚  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚                                                                             โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚   โ”‚  OPERATIONAL METADATA                                               โ”‚  โ”‚
โ”‚   โ”‚  โ€ข Freshness, last update                                           โ”‚  โ”‚
โ”‚   โ”‚  โ€ข Quality scores                                                   โ”‚  โ”‚
โ”‚   โ”‚  โ€ข Usage statistics                                                 โ”‚  โ”‚
โ”‚   โ”‚  โ€ข Query patterns                                                   โ”‚  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

6.3 DataHub : Setup et Utilisation

DataHub est le Data Catalog open source le plus populaire (crรฉรฉ par LinkedIn).

# Installation avec Docker
git clone https://github.com/datahub-project/datahub.git
cd datahub/docker
./quickstart.sh

# Accรฉder ร  l'UI
# http://localhost:9002
# Login: datahub / datahub

6.4 Ingestion de Metadata

# recipes/snowflake_ingestion.yaml
source:
  type: snowflake
  config:
    account_id: "mycompany.us-east-1"
    username: ${SNOWFLAKE_USER}
    password: ${SNOWFLAKE_PASSWORD}
    warehouse: COMPUTE_WH
    database_pattern:
      allow:
        - "PROD"
    include_table_lineage: true
    profiling:
      enabled: true

sink:
  type: datahub-rest
  config:
    server: "http://localhost:8080"
# Installer le CLI et exรฉcuter l'ingestion
pip install 'acryl-datahub[snowflake]'
datahub ingest -c recipes/snowflake_ingestion.yaml

6.5 Lineage Automatique

# Spark avec DataHub Lineage
from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .appName("OrdersETL") \
    .config("spark.extraListeners", "datahub.spark.DatahubSparkListener") \
    .config("spark.datahub.rest.server", "http://localhost:8080") \
    .getOrCreate()

# Ces opรฉrations crรฉent automatiquement le lineage dans DataHub
orders = spark.read.parquet("s3://bucket/raw/orders")
customers = spark.read.parquet("s3://bucket/dim/customers")

enriched = orders.join(customers, "customer_id")
enriched.write.parquet("s3://bucket/gold/orders_enriched")

# Lineage capturรฉ :
# raw/orders โ”€โ”€โ”
#              โ”œโ”€โ”€โ–ถ gold/orders_enriched
# dim/customersโ”˜

6.6 Alternatives ร  DataHub

Outil Type Points forts
DataHub Open Source Lineage, extensible, actif
OpenMetadata Open Source UI moderne, tout-en-un
Atlan Commercial UX, collaboration
Alation Commercial Recherche, ML-powered
Unity Catalog Databricks Intรฉgrรฉ, ACL avancรฉ

7. Federated Governance

7.1 Gouvernance Centralisรฉe vs Fรฉdรฉrรฉe

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    GOUVERNANCE CENTRALISร‰E vs Fร‰Dร‰Rร‰E                       โ”‚
โ”‚                                                                             โ”‚
โ”‚   CENTRALISร‰E                         Fร‰Dร‰Rร‰E (Data Mesh)                   โ”‚
โ”‚   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€                         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€                   โ”‚
โ”‚                                                                             โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                  โ”‚
โ”‚   โ”‚  Central Team   โ”‚                 โ”‚  Global Policiesโ”‚                  โ”‚
โ”‚   โ”‚  decides ALL    โ”‚                 โ”‚  (standards)    โ”‚                  โ”‚
โ”‚   โ”‚  policies       โ”‚                 โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                          โ”‚                           โ”‚
โ”‚            โ”‚                                   โ–ผ                           โ”‚
โ”‚            โ–ผ                          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                 โ”‚   Domain A        โ”‚                โ”‚
โ”‚   โ”‚  All Domains    โ”‚                 โ”‚   (local policies)โ”‚                โ”‚
โ”‚   โ”‚  follow blindly โ”‚                 โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค                โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                 โ”‚   Domain B        โ”‚                โ”‚
โ”‚                                       โ”‚   (local policies)โ”‚                โ”‚
โ”‚   โŒ Slow                             โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                โ”‚
โ”‚   โŒ One-size-fits-all                                                     โ”‚
โ”‚   โŒ Bottleneck                       โœ… Fast                               โ”‚
โ”‚                                       โœ… Context-aware                      โ”‚
โ”‚                                       โœ… Scalable                           โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

7.2 Policies Globales vs Locales

Scope Exemples Qui dรฉcide
Global Naming conventions, formats de dates, compliance GDPR Platform team
Local Schema spรฉcifique, SLOs, refresh frequency Domain team

7.3 Standards Communs (Interopรฉrabilitรฉ)

# global_standards.yaml
# Standards que TOUS les domaines doivent respecter

naming:
  tables: "{domain}_{entity}_{type}"  # orders_customers_dim
  columns: snake_case
  timestamps: "*_at" suffix  # created_at, updated_at

formats:
  dates: ISO 8601 (YYYY-MM-DD)
  timestamps: ISO 8601 with timezone (UTC)
  currency: ISO 4217 codes (EUR, USD)
  country: ISO 3166-1 alpha-2 (FR, US)

quality:
  minimumFreshness: 24h
  minimumCompleteness: 95%
  requiredTests:
    - uniqueness on primary key
    - not null on required columns

compliance:
  piiColumns:
    mustBeTagged: true
    defaultRetention: 3 years
    encryption: required

7.4 Data Quality as Code

# Policies automatisรฉes via CI/CD

def validate_global_standards(contract):
    """Valider qu'un contract respecte les standards globaux."""
    errors = []
    
    # 1. Naming convention
    if not re.match(r'^[a-z]+_[a-z]+_(fact|dim|event)$', contract['info']['title']):
        errors.append("Table name must follow {domain}_{entity}_{type} convention")
    
    # 2. Required metadata
    if 'owner' not in contract['info']:
        errors.append("Owner is required")
    
    # 3. Quality SLOs
    if contract.get('quality', {}).get('freshness', {}).get('threshold', '999h') > '24h':
        errors.append("Freshness SLO must be <= 24h")
    
    # 4. PII tagging
    for field in contract.get('schema', {}).get('fields', []):
        if 'pii' not in field:
            errors.append(f"Field {field['name']} must have PII tag")
    
    return errors

7.5 Compliance (GDPR, PII)

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    PII MANAGEMENT                                           โ”‚
โ”‚                                                                             โ”‚
โ”‚   1. IDENTIFICATION                                                         โ”‚
โ”‚      Tag PII columns in contract: pii: true                                โ”‚
โ”‚                                                                             โ”‚
โ”‚   2. CLASSIFICATION                                                         โ”‚
โ”‚      โ€ข Direct PII: email, phone, SSN                                       โ”‚
โ”‚      โ€ข Indirect PII: customer_id, IP address                               โ”‚
โ”‚      โ€ข Sensitive: health, financial, political                             โ”‚
โ”‚                                                                             โ”‚
โ”‚   3. PROTECTION                                                             โ”‚
โ”‚      โ€ข Encryption at rest                                                  โ”‚
โ”‚      โ€ข Access control (need-to-know)                                       โ”‚
โ”‚      โ€ข Masking for non-prod environments                                   โ”‚
โ”‚                                                                             โ”‚
โ”‚   4. RETENTION                                                              โ”‚
โ”‚      โ€ข Define retention period per classification                          โ”‚
โ”‚      โ€ข Automated deletion                                                  โ”‚
โ”‚      โ€ข Right to be forgotten (GDPR)                                        โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

8. Implรฉmentation Pratique

8.1 Par Oรน Commencer ?

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    ROADMAP D'ADOPTION DATA MESH                             โ”‚
โ”‚                                                                             โ”‚
โ”‚   PHASE 1: PILOT (3-6 mois)                                                โ”‚
โ”‚   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€                                                โ”‚
โ”‚   โ€ข Choisir 1-2 domaines pilotes                                           โ”‚
โ”‚   โ€ข Dรฉfinir les premiers Data Products                                     โ”‚
โ”‚   โ€ข ร‰crire les premiers Data Contracts                                     โ”‚
โ”‚   โ€ข Setup basique du catalog (DataHub)                                     โ”‚
โ”‚                                                                             โ”‚
โ”‚   PHASE 2: EXPAND (6-12 mois)                                              โ”‚
โ”‚   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€                                             โ”‚
โ”‚   โ€ข Ajouter 3-5 domaines                                                   โ”‚
โ”‚   โ€ข Dรฉvelopper la self-serve platform                                      โ”‚
โ”‚   โ€ข Automatiser la validation des contracts                                โ”‚
โ”‚   โ€ข Dรฉfinir les standards globaux                                          โ”‚
โ”‚                                                                             โ”‚
โ”‚   PHASE 3: SCALE (12+ mois)                                                โ”‚
โ”‚   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€                                                โ”‚
โ”‚   โ€ข Tous les domaines on-boardรฉs                                           โ”‚
โ”‚   โ€ข Plateforme mature et self-serve                                        โ”‚
โ”‚   โ€ข Gouvernance fรฉdรฉrรฉe opรฉrationnelle                                     โ”‚
โ”‚   โ€ข Mรฉtriques et amรฉlioration continue                                     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

8.2 Critรจres de Sรฉlection des Domaines Pilotes

Critรจre Bon candidat Mauvais candidat
Maturitรฉ รฉquipe ร‰quipe tech capable Pas de compรฉtences data
Complexitรฉ Modรฉrรฉe Trop simple ou trop complexe
Visibilitรฉ Impact business visible Projet interne invisible
Dรฉpendances Peu de dรฉpendances Dรฉpend de tout le monde
Sponsor Management engagรฉ Pas de sponsor

8.3 Anti-Patterns ร  ร‰viter

Anti-Pattern Problรจme Solution
Big Bang Tout migrer dโ€™un coup Approche incrรฉmentale
Platform-first Construire la plateforme avant les besoins Use-case driven
No Governance Chaque domaine fait ce quโ€™il veut Standards globaux
Over-Governance Trop de rรจgles, retour au bottleneck Balance global/local
Copy-Paste Copier les donnรฉes au lieu de les consommer Data Products vrais

8.4 Mรฉtriques de Succรจs

Mรฉtrique Description Target
Time to Data Temps pour accรฉder ร  une nouvelle donnรฉe < 1 jour
Data Product Count Nombre de Data Products publiรฉs Croissance
Contract Coverage % de tables avec contract > 80%
Quality Score Score moyen de qualitรฉ > 95%
Consumer Satisfaction NPS des consommateurs > 50

9. Exercices Pratiques

Exercice 1 : Identifier les Domaines

Pour une entreprise de e-commerce avec les รฉquipes suivantes : - ร‰quipe Produit (catalogue, pricing) - ร‰quipe Ventes (commandes, paiements) - ร‰quipe Logistique (livraisons, stock) - ร‰quipe Marketing (campagnes, analytics) - ร‰quipe Support (tickets, satisfaction)

Questions : 1. Identifier les 5 domaines Data Mesh 2. Lister 2-3 Data Products par domaine 3. Identifier les dรฉpendances entre domaines


Exercice 2 : ร‰crire un Data Contract

ร‰crire un Data Contract complet pour la table customers_dim avec : - 6+ colonnes (id, name, email, country, created_at, segment) - PII identifiรฉ - SLOs de qualitรฉ - SLA de disponibilitรฉ


Exercice 3 : Setup DataHub Local

  1. Installer DataHub avec Docker
  2. Crรฉer une recette dโ€™ingestion pour un fichier Parquet local
  3. Exรฉcuter lโ€™ingestion
  4. Explorer le lineage dans lโ€™UI

Exercice 4 : Validation de Contract avec Soda

  1. Convertir le Data Contract de lโ€™exercice 2 en checks Soda
  2. Crรฉer des donnรฉes de test (certaines valides, certaines invalides)
  3. Exรฉcuter Soda et interprรฉter les rรฉsultats

Exercice 5 : Schema Evolution

Simuler une schema evolution : 1. Version 1.0.0 du contract orders_fact 2. Ajouter une colonne nullable discount_code (non-breaking) 3. Renommer user_id en customer_id (breaking) 4. Documenter le processus de deprecation


10. Mini-Projet : Data Mesh Pilot

Objectif

Implรฉmenter un pilot Data Mesh avec 2 domaines.

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                      MINI-PROJET : DATA MESH PILOT                          โ”‚
โ”‚                                                                             โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                          โ”‚
โ”‚   โ”‚  ORDERS DOMAIN  โ”‚         โ”‚ CUSTOMERS DOMAINโ”‚                          โ”‚
โ”‚   โ”‚                 โ”‚         โ”‚                 โ”‚                          โ”‚
โ”‚   โ”‚  Data Product:  โ”‚         โ”‚  Data Product:  โ”‚                          โ”‚
โ”‚   โ”‚  - orders_fact  โ”‚โ—€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ถโ”‚  - customers_dimโ”‚                          โ”‚
โ”‚   โ”‚  - Contract โœ“   โ”‚         โ”‚  - Contract โœ“   โ”‚                          โ”‚
โ”‚   โ”‚  - SLOs โœ“       โ”‚         โ”‚  - SLOs โœ“       โ”‚                          โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                          โ”‚
โ”‚            โ”‚                           โ”‚                                    โ”‚
โ”‚            โ–ผ                           โ–ผ                                    โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚   โ”‚                     SELF-SERVE PLATFORM                             โ”‚  โ”‚
โ”‚   โ”‚                                                                     โ”‚  โ”‚
โ”‚   โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                โ”‚  โ”‚
โ”‚   โ”‚   โ”‚   DataHub   โ”‚  โ”‚   Contract  โ”‚  โ”‚   Quality   โ”‚                โ”‚  โ”‚
โ”‚   โ”‚   โ”‚   Catalog   โ”‚  โ”‚  Validation โ”‚  โ”‚  (Soda)     โ”‚                โ”‚  โ”‚
โ”‚   โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                โ”‚  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Livrables

  1. Data Contracts : 2 contracts complets (orders_fact, customers_dim)
  2. Soda Checks : Validation automatisรฉe pour chaque contract
  3. DataHub : Catalog avec les 2 Data Products
  4. Lineage : Visualisation des dรฉpendances
  5. CI/CD : Pipeline de validation des contracts
  6. Documentation : README avec architecture et standards

Structure du Projet

data-mesh-pilot/
โ”œโ”€โ”€ domains/
โ”‚   โ”œโ”€โ”€ orders/
โ”‚   โ”‚   โ”œโ”€โ”€ contracts/
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ orders_fact.yaml
โ”‚   โ”‚   โ”œโ”€โ”€ soda/
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ orders_checks.yaml
โ”‚   โ”‚   โ””โ”€โ”€ pipelines/
โ”‚   โ”‚       โ””โ”€โ”€ orders_etl.py
โ”‚   โ””โ”€โ”€ customers/
โ”‚       โ”œโ”€โ”€ contracts/
โ”‚       โ”‚   โ””โ”€โ”€ customers_dim.yaml
โ”‚       โ”œโ”€โ”€ soda/
โ”‚       โ”‚   โ””โ”€โ”€ customers_checks.yaml
โ”‚       โ””โ”€โ”€ pipelines/
โ”‚           โ””โ”€โ”€ customers_etl.py
โ”œโ”€โ”€ platform/
โ”‚   โ”œโ”€โ”€ datahub/
โ”‚   โ”‚   โ””โ”€โ”€ docker-compose.yaml
โ”‚   โ”œโ”€โ”€ standards/
โ”‚   โ”‚   โ””โ”€โ”€ global_standards.yaml
โ”‚   โ””โ”€โ”€ ci/
โ”‚       โ””โ”€โ”€ contract_validation.yaml
โ”œโ”€โ”€ data/
โ”‚   โ”œโ”€โ”€ orders.parquet
โ”‚   โ””โ”€โ”€ customers.parquet
โ””โ”€โ”€ README.md

Critรจres de Succรจs


๐Ÿ“š Ressources

Documentation

Livres

  • Data Mesh: Delivering Data-Driven Value at Scale โ€” Zhamak Dehghani
  • Fundamentals of Data Engineering โ€” Joe Reis, Matt Housley

Outils


โžก๏ธ Prochaine รฉtape

๐Ÿ‘‰ Module suivant : 33_real_time_analytics โ€” Real-Time Analytics


๐ŸŽ‰ Fรฉlicitations ! Tu maรฎtrises maintenant les concepts de Data Mesh et Data Contracts.

Retour au sommet