← Blog
Architecture Data

L'architectureen médaillon

Du lac de données au datamart — comment structurer chaque couche de transformation pour produire des données fiables, traçables et prêtes pour les métiers.

8 min de lectureDatabricks · Delta Lake · PySpark
🥉 Bronze
🥈 Silver
🥇 Gold

L'architecture en médaillon est un pattern de conception introduit par Databricks dans l'écosystème Delta Lake. Elle organise un lac de données en couches successives — Bronze, Silver, Gold — chacune apportant un niveau de qualité supplémentaire.

💡
Principe fondateur — On ne détruit jamais la donnée brute. On la transforme en couches. Si une transformation est défaillante, on revient en arrière et on rejoue depuis le Bronze.

Vue d'ensemble

Les données traversent trois couches successives — chaque étape augmente la qualité et la valeur métier.

🥉
Bronze
Données brutes · Append-only
+
JSON brutCSV sourceEvents KafkaCDCSchéma flexible

Point d'entrée de toutes les données. Ingestion fidèle sans transformation métier.

  • Timestamp d'ingestion et nom de la source ajoutés
  • Aucune transformation métier — fidélité absolue
  • Immutable : on réingère, on ne corrige pas
🥈
Silver
Données nettoyées · Schéma garanti
+
ParsingDéduplicationDates ISOMERGE / upsertRGPD

Couche de confiance. Parsing, validation, normalisation, enrichissement.

  • Schéma typé et strict — toutes les colonnes sont garanties
  • MERGE Delta pour gérer les corrections et duplicats
  • Référentiels joints : clients, produits, agences
🥇
Gold
Données métier · Prêtes à consommer
+
KPIsAgrégatsDatamartsWide tablesFeatures ML

Vitrine. Agrégats, datamarts et features optimisés pour la BI et le ML.

  • Tables dénormalisées (wide tables) pour accélérer les requêtes analytiques
  • KPIs journaliers / hebdomadaires / mensuels précalculés
  • Feature store pour les modèles de machine learning en production
🥉

Bronze — La donnée brute

Ingestion fidèle · Append-only · Immutable

Le Bronze est le point d'entrée. On ingère les sources telles quelles, sans aucune transformation métier. L'objectif est la fidélité absolue à la source.

On ajoute uniquement des métadonnées techniques : timestamp d'ingestion, nom du fichier source, identifiant du run.

Règle fondamentale
Le Bronze est append-only. On ne corrige pas une donnée en Bronze — on la réingère. Cette immutabilité permet de rejouer toute la chaîne à tout moment.
PySpark · Kafka → Bronze
# Ingestion Kafka → couche Bronze
df = (
    spark.readStream
        .format("kafka")
        .option("kafka.bootstrap.servers", "broker:9092")
        .option("subscribe", "orders")
        .load()
)

df_bronze = df.select(
    col("value").cast("string").alias("payload"),
    current_timestamp().alias("ingested_at"),  # métadonnée
    lit("kafka/orders").alias("source"),
)

df_bronze.writeStream
    .format("delta")
    .outputMode("append")      # append-only !
    .start("/delta/bronze/orders")
🥈

Silver — La donnée nettoyée

Qualité · Déduplication · Normalisation

🔍
Parsing
JSON brut → colonnes typées et structurées
Validation
Contrôle de non-nullité sur les champs critiques
♻️
Déduplication
Suppression des doublons par clé métier
📐
Normalisation
Dates ISO 8601, montants en centimes, pays ISO
🔗
Enrichissement
Jointure avec référentiels clients et produits
🛡️
RGPD
Pseudonymisation et suppression des données sensibles
Delta Lake · MERGE upsert
# MERGE upsert Silver avec Delta Lake
from delta.tables import DeltaTable

silver = DeltaTable.forPath(spark, "/delta/silver/orders")

silver.alias("s").merge(
    source=df_incoming.alias("i"),
    condition="s.order_id = i.order_id"
).whenMatchedUpdate(set={
    "status":     "i.status",
    "updated_at": "i.updated_at",
}).whenNotMatchedInsertAll().execute()
🥇

Gold — La donnée métier

Agrégats · Datamarts · Features ML

0ms
Latence après CDC
0min
Latence avant (batch)
0
Couches indépendantes

Le Gold est la vitrine. On y construit des agrégats et des datamarts optimisés pour les outils de BI et les modèles de machine learning en production.

📊
BI & Reporting
Tableau, Power BI, Metabase — agrégats précalculés
🤖
Machine Learning
Feature store — vecteurs prêts pour l'entraînement
Apps opérationnelles
Dashboards temps réel, alertes, exports
PySpark · Agrégat journalier
# Agrégat journalier des ventes → Gold
df_gold = (
    spark.read.format("delta")
    .load("/delta/silver/orders")
    .filter(col("status") == "completed")
    .groupBy(
        to_date("completed_at").alias("date"),
        "region", "product_category",
    )
    .agg(
        count("order_id").alias("nb_orders"),
        sum("amount_eur").alias("revenue_eur"),
    )
)
df_gold.write.format("delta").mode("overwrite")
    .save("/delta/gold/daily_sales")

Orchestration

Chaque couche est déclenchée après le succès de la précédente via Databricks Workflows ou Apache Airflow.

🗄️
Sources
DB · APIs · Kafka
🥉
Bronze
Ingestion brute
🥈
Silver
Nettoyage
🥇
Gold
Agrégation
📊
BI / ML
Consommation
⏱️
Time travel Delta Lake — Si une transformation Silver est défaillante, on revient à la version N-1 : RESTORE TABLE silver.orders TO VERSION AS OF 5. Aucune donnée perdue.

Quand l'utiliser ?

Plusieurs sources hétérogènes, équipes multiples
Bronze / Silver / Gold — séparation claire des responsabilités
Besoin de rejouer les transformations
Immutabilité du Bronze garantit le replay complet
Corrections de données fréquentes
MERGE Silver absorbe les corrections sans impacter le Bronze
Source unique, projet simple
Raw / Curated — deux couches suffisent, moins de complexité
Pipeline temps réel, SLA < 1 min
Adapter avec Delta Streaming, mais le pattern reste valide

L'architecture en médaillon n'est pas une technologie, c'est un contrat d'équipe. Elle oblige à répondre à des questions que beaucoup de projets esquivent : qui garantit la qualité de cette table ? D'où viennent ces données ? Peut-on rejouer la transformation ?

Commentaires

Soyez le premier à commenter cet article.

Laisser un commentaire

Votre commentaire sera visible après validation par l'administrateur.

0/2000
© 2026 Aboubacar Camara