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.
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.
Les données traversent trois couches successives — chaque étape augmente la qualité et la valeur métier.
Point d'entrée de toutes les données. Ingestion fidèle sans transformation métier.
Couche de confiance. Parsing, validation, normalisation, enrichissement.
Vitrine. Agrégats, datamarts et features optimisés pour la BI et le ML.
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.
# 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")Qualité · Déduplication · Normalisation
# 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()Agrégats · Datamarts · Features ML
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.
# 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")Chaque couche est déclenchée après le succès de la précédente via Databricks Workflows ou Apache Airflow.
RESTORE TABLE silver.orders TO VERSION AS OF 5. Aucune donnée perdue. 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 ?
Soyez le premier à commenter cet article.
Votre commentaire sera visible après validation par l'administrateur.