๐ฅ Niveau 3 : Avancรฉ
๐๏ธ 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.
pythonVoir 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
pythonVoir 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 :
- Identifier les 5 domaines Data Mesh
- Lister 2-3 Data Products par domaine
- 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
- Installer DataHub avec Docker
- Crรฉer une recette d'ingestion pour un fichier Parquet local
- Exรฉcuter l'ingestion
- Explorer le lineage dans l'UI
Exercice 4 : Validation de Contract avec Soda
- Convertir le Data Contract de l'exercice 2 en checks Soda
- Crรฉer des donnรฉes de test (certaines valides, certaines invalides)
- Exรฉcuter Soda et interprรฉter les rรฉsultats
Exercice 5 : Schema Evolution
Simuler une schema evolution :
- Version 1.0.0 du contract
orders_fact - Ajouter une colonne nullable
discount_code(non-breaking) - Renommer
user_idencustomer_id(breaking) - 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
- Data Contracts : 2 contracts complets (orders_fact, customers_dim)
- Soda Checks : Validation automatisรฉe pour chaque contract
- DataHub : Catalog avec les 2 Data Products
- Lineage : Visualisation des dรฉpendances
- CI/CD : Pipeline de validation des contracts
- 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
- [ ] 2 Data Contracts complets et valides
- [ ] Soda checks passent ร 100%
- [ ] DataHub affiche les 2 Data Products
- [ ] Lineage visible entre orders et customers
- [ ] CI/CD dรฉtecte les breaking changes
- [ ] Documentation claire
๐ Ressources
Documentation
- Data Mesh Principles (Zhamak Dehghani)
- Data Contract Specification
- DataHub Documentation
- Soda Documentation
Livres
- Data Mesh: Delivering Data-Driven Value at Scale โ Zhamak Dehghani
- Fundamentals of Data Engineering โ Joe Reis, Matt Housley
Outils
- DataHub โ Data Catalog open source
- OpenMetadata โ Alternative open source
- Soda โ Data Quality
- DataContract CLI โ Contract validation
โก๏ธ 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.