The problem it solves

Without a shared convention, every team that touches a lakehouse ends up inventing its own folder structure and its own definition of "clean" — one analyst's cleaned table is another's half-finished one. The Medallion architecture (popularized by Databricks, but not tied to any one vendor) fixes this by giving every table a clear place in a three-stage progression, so anyone opening the platform for the first time already knows what to expect from a table based on which layer it's in.
Bronze raw, immutable Silver clean, conformed Gold business-ready

Bronze: raw, immutable, source of truth

Bronze tables are the source data landed as-is, with minimal transformation — usually just adding ingestion metadata (load timestamp, source file name). Nothing is deduplicated or reshaped here. If a downstream bug corrupts a silver table, bronze is what you replay from.

Silver: cleaned, conformed, deduplicated

Silver applies the transformations everyone actually needs: deduplication, type casting, joining reference data, filtering out known-bad records. Silver tables still sit close to the source grain — one row per order line, not per customer per month — but they're now trustworthy enough that any team can build on them without redoing the cleanup themselves.
Bronze → Silver applies: Deduplication Type casting Known-bad filtering Reference joins Business aggregation (that's Gold)

Gold: business-level, ready to consume

Gold tables are aggregated and shaped around a specific business question: daily revenue by region, active users by cohort. They're intentionally denormalized and disposable — a gold table can always be rebuilt from silver, so it's safe to optimize purely for the dashboard or model that consumes it.

A minimal example


# Bronze -> Silver: dedupe and enforce types, nothing else
silver_df = (
    bronze_df
    .dropDuplicates(["order_id"])
    .withColumn("order_date", F.to_date("order_date"))
    .filter(F.col("order_id").isNotNull())
)
silver_df.write.format("delta").mode("overwrite").save("s3://lakehouse/silver/orders/")
Nothing here is business-specific — it's the same handful of checks every team would otherwise write themselves, done once, in one place everyone can rely on.

Subscribe to our Newsletter

Subscribe to our newsletter to get notifications about new updates, etc...