A data design pattern that organizes data into three layers — Bronze (raw), Silver (cleaned), and Gold (business-ready) — to progressively improve data quality in a lakehouse.
Medallion architecture is the branding Databricks applied to a very old pattern — raw/staging/marts, or landing/cleansed/curated — and happens to be the most useful three-layer default for any lakehouse or warehouse project in 2026. Bronze = raw source data exactly as it arrived (no transforms, only metadata). Silver = cleaned, deduplicated, conformed entity tables with strong types. Gold = business-ready aggregates, dimensional models, and feature tables that power dashboards and ML. The naming is memorable; the pattern is platform-agnostic — you can implement it with dbt in Snowflake, with Spark on Delta, with Airflow + Iceberg, or with homegrown SQL. The value isn't in the medal names; it's in the discipline of not letting raw ingests go directly to dashboards and not letting business logic leak into data-cleaning jobs.
Without medallion-style separation, two pathologies emerge. (1) Dashboards read directly from raw source tables, so a vendor's API schema change silently breaks the CEO dashboard. (2) Business logic gets mixed into cleaning logic, so nobody can tell whether "active customer" means one thing in Marketing's definition and another in Sales's. Bronze/Silver/Gold forces a physical and logical boundary: Bronze preserves history (replayable source of truth), Silver standardizes entities (shared semantics across the org), Gold encodes business rules (owned by domain teams). Each layer has a different owner, different SLA, different refresh cadence.
A retail client had grown their dbt project from 20 to 420 models over 18 months with no layering discipline — models directly on raw CDC tables, joins across 8 sources per model, business metrics defined inconsistently across 6 different models. A tax-code change in the source ERP broke 38 downstream dashboards overnight because no staging layer absorbed the schema drift. We refactored into strict medallion: 120 Bronze (raw CDC snapshots, 1:1 with sources), 180 Silver (deduplicated, conformed entities: customer, product, order, transaction), 120 Gold (department-owned marts with documented metrics). Source schema changes now break only 1-3 Silver models (usually auto-healed by dbt contracts); Gold dashboards are insulated. Time to add a new source dropped from 2 weeks to 3 days. The refactor took 6 months; the ongoing velocity gain was worth 2x that investment.
The Medallion Architecture (also called Multi-Hop Architecture) is the most popular design pattern for organizing data in a Data Lakehouse. Popularized by Databricks, it divides your data pipeline into three distinct quality layers:
customers table combining Salesforce + Stripe + internal DB recordsdaily_revenue_by_region, customer_lifetime_value, churn_predictionsSource Systems → [Bronze] → [Silver] → [Gold] → BI / ML
Raw Clean Aggregated
Append Validated Business Logic
Replay Conformed Star Schema| Layer | Common Tools |
|---|---|
| Bronze | Fivetran, Airbyte, Kafka Connect, AWS Glue |
| Silver | dbt, Spark, Snowflake Tasks, Dataform |
| Gold | dbt, Looker, Power BI, Tableau |
Medallion architecture pitfalls that undercut its value:
m1, m2, pct_chg destroys trust. Every Gold model should have a description, tests, and owner — enforce via CI.The Medallion Architecture is a three-layer data design pattern for lakehouses and warehouses that organizes data by quality/purpose: Bronze (raw ingested data, as-is from source), Silver (cleaned, deduplicated, conformed entities), and Gold (business-ready aggregates, dimensional models, ML features). Popularized by Databricks around 2020, the pattern is platform-agnostic — it maps to dbt's staging/intermediate/marts, to Kimball's staging area/integration layer/presentation layer, and to Azure's landing/standardized/curated zones. The value isn't in the medal branding; it's in enforcing layered responsibility: raw preservation (Bronze), shared entity semantics (Silver), and department-specific business logic (Gold). Most modern lakehouses (Databricks, Snowflake with dbt, Iceberg with Spark) adopt some variant of this pattern by default.
Bronze (raw): exact copies of source data, only with added ingestion metadata (source system, load timestamp, checksum). Append-mostly, schema-on-read often, used for replay/reprocessing. Silver (cleaned): deduplicated, type-cast, null-handled, conformed across sources. Schema-enforced, strongly typed, partitioned for query performance. Represents shared business entities (customer, order, product) used across the org. Gold (business-ready): aggregated, enriched, dimensionally modeled. Use-case-specific — marketing mart, finance mart, ML feature store. Optimized for consumer queries (BI tools, dashboards, ML training). Key rule: data flows Bronze → Silver → Gold, never backward; transformations at each layer are clearly scoped (Bronze = none, Silver = entity cleaning, Gold = business logic).
No — the pattern predates Databricks and works on any stack. Databricks coined the "Medallion" name and markets it heavily because Delta Lake benefits from the layered approach, but the actual pattern is platform-neutral. Snowflake + dbt shops typically use raw → staging → intermediate → marts (same pattern, different names). Azure deployments use landing/standardized/curated zones. BigQuery + dbt uses the same dbt layering. Self-hosted Spark + Iceberg uses raw → cleaned → curated. The medallion vocabulary is most common in lakehouse / Spark contexts. In warehouse-centric contexts (Snowflake, BigQuery, Redshift), you'll more often hear "staging/marts" or "raw/refined/mart." They're all the same idea — pick the vocabulary that fits your team's existing tools.
Yes, and it's arguably the default for well-structured Snowflake + dbt projects. Typical implementation: separate databases (RAW, ANALYTICS) or schemas (raw.source_name, staging, intermediate, marts). Raw = Bronze (Fivetran/Airbyte/Snowpipe writes directly here, no dbt touches it). Staging in dbt = thin Bronze-to-Silver adapter (rename columns, cast types, add metadata). Intermediate in dbt = Silver proper (entity tables joining multiple sources, deduplication, SCD Type 2). Marts in dbt = Gold (department-owned aggregates, dimensional models). Use Snowflake zero-copy cloning to create dev copies of any layer instantly. Use dbt contracts to pin Silver schemas so Gold doesn't break on upstream changes. Snowflake + dbt + medallion is the most common modern warehouse stack for good reason — it just works.
The test: is this transformation useful across teams, or is it specific to one use case? Silver answers "what is a customer" — an entity definition shared across marketing, sales, support, finance. If Marketing and Sales disagree on the definition, that's a Silver-level modeling discussion. Gold answers "what is a marketing-qualified customer in Q4 for the APAC campaign" — narrow, use-case-driven, owned by one team. Silver tables rarely have business metrics; Gold tables are mostly business metrics. Silver is typically normalized to 3NF-ish or lightly-denormalized entity form; Gold is heavily denormalized star/snowflake schema optimized for BI. Silver tables are long-lived (years); Gold tables come and go with campaigns and initiatives. If multiple Gold marts need the same cleaning logic, promote that logic to Silver.
Each layer can run on its own cadence. Bronze: Kafka/Kinesis topics landing into Iceberg/Delta tables via streaming writers (Flink, Spark Structured Streaming, Snowpipe Streaming) — typically seconds-to-minutes latency. Silver: micro-batch or streaming joins and dedup — cleaning per-record is hard in pure streaming (stateful joins blow up memory), so many teams run Silver as 1-15 minute micro-batches. Gold: hourly or daily aggregates triggered when Silver freshness advances — typically scheduled, not streaming. A common hybrid: streaming Bronze, micro-batch Silver, batch Gold — each layer optimized for its consumer's latency needs. Tools: Apache Flink + Iceberg for streaming Silver; Databricks DLT for streaming medallion; Snowflake Dynamic Tables for layered refresh cascades; dbt + Airflow/Dagster for batch medallion.
They solve orthogonal problems and can coexist. Medallion: vertical layering by data quality/purpose (Bronze/Silver/Gold) — about how raw data is progressively refined into business-ready tables. Data mesh: horizontal ownership by domain (sales domain, finance domain, product domain) — about who owns each dataset, treating data as a product with consumers, SLAs, and documentation. In a combined setup, each domain runs its own medallion stack: sales owns sales-Bronze/Silver/Gold, finance owns finance-Bronze/Silver/Gold. Shared entities (customer, product) are governed by a central team or a federated contract. Medallion without mesh gives you clean layering but centralized ownership bottlenecks. Mesh without medallion gives you distributed ownership but inconsistent quality. Most mature platforms use both — domain-owned medallion pipelines with a shared catalog for governance.