Medallion architecture
Medallion architecture is a data design pattern that organizes a lakehouse into progressive layers — Bronze (raw), Silver (cleaned), and Gold (business-level aggregates) — improving data quality and structure as it moves through each stage.
Overview
Medallion architecture, popularized by Databricks, structures a lakehouse into three layers of tables that data flows through, each adding more cleaning, structure, or business logic than the last:
- Bronze — raw data landed as-is from source systems, preserving the original format and history for traceability and reprocessing.
- Silver — cleaned, deduplicated, and conformed data: types are fixed, invalid records are filtered or flagged, and tables are joined into a more usable structure.
- Gold — business-level, aggregated tables tailored to specific use cases — dashboards, reports, or machine learning features — often the layer that BI tools query directly.
Why layer the pipeline
Separating these stages makes each transformation step independently testable and re-runnable. If a bug is found in a Gold aggregation, Silver data doesn't need to be reprocessed from scratch; if source data was malformed, Bronze retains the original so nothing is lost. It also gives different consumers appropriate points of access — engineers might work close to Bronze/Silver, while analysts and BI tools consume Gold.
Relationship to table formats
Medallion architecture is a modeling pattern, not a technology — it's commonly implemented with open table formats like Apache Iceberg, Delta Lake, or DuckLake providing the underlying transactional tables at each layer, and orchestration tools like dbt or Airflow managing the transformations between layers.
Implementing medallion layers with DuckDB and MotherDuck
Each layer can be modeled as its own schema or database, materialized with SQL:
Copy code
-- Bronze: raw ingested data
CREATE SCHEMA IF NOT EXISTS bronze;
CREATE TABLE bronze.raw_orders AS
SELECT * FROM read_json('s3://landing/orders/*.json');
-- Silver: cleaned and typed
CREATE TABLE silver.orders AS
SELECT order_id, CAST(order_date AS DATE) AS order_date, amount
FROM bronze.raw_orders
WHERE amount IS NOT NULL;
-- Gold: business aggregate
CREATE TABLE gold.daily_revenue AS
SELECT order_date, SUM(amount) AS revenue
FROM silver.orders
GROUP BY ALL;
Tools like dbt are often layered on top to manage these transformations as a DAG of models against a MotherDuck database.
Related terms
A data lakehouse is an architecture that combines the low-cost, flexible storage of a data lake with the ACID transactions, schema enforcement, and performance features of a data warehouse.
Lambda architecture →Lambda architecture is a data processing design that runs a batch layer and a speed layer in parallel to balance completeness and accuracy against low-latency results, merging both into a serving layer.
Databricks →Databricks is a cloud data and AI platform built by the original creators of Apache Spark, centered on the lakehouse architecture that unifies data lakes and warehousing.
Semantic layer →A semantic layer is a layer between raw data and end users that defines business metrics, dimensions, and relationships once, so that different tools and teams query consistent, agreed-upon definitions instead of re-deriving them independently.
Kappa architecture →Kappa architecture is a data processing design that uses a single stream-processing pipeline for both real-time and historical data, avoiding the separate batch layer required by Lambda architecture.
Data transformation →Data transformation is the process of converting data from its raw, source format into a structured form suited to analysis — through operations like cleaning, joining, aggregating, and reshaping.
FAQS
Bronze holds raw, unmodified data as landed from source systems. Silver holds cleaned, deduplicated, and conformed data. Gold holds business-level aggregates and metrics ready for dashboards, reports, or machine learning.
No. It's a data modeling pattern that can be implemented with any table format or engine — commonly Apache Iceberg, Delta Lake, or DuckLake for storage, and dbt, Airflow, or Spark for orchestrating the transformations between layers.
Keeping Bronze and Silver layers lets you reprocess or debug transformations without re-extracting from source systems, and gives different consumers appropriate access points — raw data for engineers, curated aggregates for analysts.
