skip to content

Medallion & Lakehouse Layering

Bronze raw, silver cleaned and conformed, gold business-ready — the layering convention that keeps a lakehouse from turning into a swamp. Expect to be asked what belongs in each layer and why raw stays immutable.

on this pageshow

questions

6

What belongs in the bronze, silver and gold layers of a medallion architecture?

level: juniorimportance: must knowfreq 78%

answer

  1. Three tiers, three different promises
  2. One of them is deliberately dirty
  3. Cleaning happens once, not per report
  4. Fidelity, correctness, business semantics
  5. Staging, intermediate, marts is the same idea

basics

~20 s

Bronze holds source data landed as received, duplicates and quirks included. Silver holds cleaned, typed, deduplicated and conformed entities at a declared grain. Gold holds business-ready output — dimensional models, aggregates and metric tables that reporting queries directly.

solid answer

~40 s

Medallion layering splits an analytics platform into three tiers with different guarantees. **Bronze** is the landing zone: source records written as received — original field names, duplicates, bad rows and all — plus ingestion metadata such as load timestamp and source file. **Silver** is where data becomes trustworthy: types enforced, records deduplicated to a declared grain, business keys resolved, code lists and currencies conformed across sources, quality checks applied. **Gold** is consumption-shaped output: facts and dimensions, aggregates and metric tables that BI tools and analysts read. The shorthand is fidelity in bronze, correctness in silver, business semantics in gold. The same pattern shows up under other names — staging, intermediate, marts — and three is a convention, not a law. What matters is that each layer adds a guarantee somebody is accountable for.

code

text · 3 lines
text
bronze_orders_raw     one row per received message, payload as-is + ingested_at
silver_orders         one row per order_id, typed, deduplicated, keys conformed
gold_fct_daily_sales  one row per order_date x product_key x store_key

go deeper

for a junior

Be ready to name the three layers and say in one sentence what each holds. The point to land is that bronze is deliberately unmodified, and that cleaning happens once in silver rather than in each report.

for a middle

Explain what guarantee each boundary adds and where a given transformation belongs — deduplication, key resolution, currency conversion, aggregation. Be able to say why report-specific filters do not belong in a shared silver table.

for a senior

Show you use the layers to isolate blame during an incident: source error, cleaning error, or metric-definition error. Be ready to justify skipping a layer for a simple source and adding one for a messy domain.

for a principal

Own the argument that layers are contract boundaries between owners, not a mandated pipeline shape. Talk about the cost of each extra copy in storage, freshness and cognitive load versus the coupling it removes.

## What medallion layering is Medallion architecture is a naming convention for the stages data passes through inside an analytics platform, popularised by Databricks as bronze / silver / gold. It is not a technology and not a file layout: it is an agreement about **what a consumer is allowed to assume** about a table depending on which layer it sits in. Every mature warehouse or lakehouse has some version of it, because the alternative — every consumer cleaning raw data their own way — produces as many versions of "revenue" as there are analysts. ## Bronze: fidelity Bronze is the landing zone. Data arrives here as close to the source's own shape as the ingestion tool allows: original column names, original types (often everything as strings or a single JSON payload column), duplicates from retries, rows that will later fail validation, and columns nobody has a use for yet. The one thing you *add* is ingestion metadata — a load timestamp, a batch or file identifier, sometimes the source row number — so you can trace any downstream row back to the delivery that produced it. What bronze guarantees is **fidelity**: this is what the source sent us, at this time. It guarantees nothing about correctness, uniqueness or types. Business logic does not belong here. Filtering out "bad" rows here is the classic mistake, because you have thrown away the evidence you would need to prove the source was wrong. ## Silver: correctness and conformance Silver is where raw becomes usable. Typical work: cast strings to real types; deduplicate to a declared grain (one row per order, one row per customer, one current row per device); resolve business keys so the same customer from three source systems becomes one identity; standardise units, currencies, country codes, status enumerations; drop or quarantine records that fail validation; apply light enrichment such as joining a reference table. Silver's guarantee is that the table means what its name says, at a stated grain, and that the stated grain actually holds. Silver tables are usually still entity-shaped — orders, customers, sessions — rather than report-shaped. Several gold tables can be built from one silver table, which is precisely why the layer exists: the deduplication and key resolution are written once instead of once per report. ## Gold: business semantics Gold is what consumers query. This is where dimensional models live — fact tables at a business-process grain with their dimensions — along with aggregates and curated metric tables. Gold encodes *business decisions*: which orders count as revenue, how returns are treated, which customers are active. It is shaped for the consumer's access pattern rather than the source's structure, and it is the layer whose column names appear in dashboards, so its schema is the one you are least free to change casually. ## The same idea under other names Analytics-engineering projects often call the same three tiers **staging**, **intermediate** and **marts**; older warehouse teams say landing / integration / presentation. The vocabularies map onto each other closely enough that interviewers use them interchangeably, and being able to say "staging is bronze-to-silver, marts are gold" is worth more than defending one label. ## What the boundaries actually buy you Three things. **Replayability**: because bronze is retained unchanged, any downstream table can be recomputed after a logic bug. **Reuse**: cleaning happens once, so twenty gold tables share one definition of a deduplicated order. **Blame isolation**: when a number is wrong you can ask a sequenced question — did the source send it wrong (bronze), did we clean it wrong (silver), or did we define the metric wrong (gold)? Without layers that debugging is one undifferentiated pile of SQL. ## Common misplacements Aggregating in silver so that the detail is gone; putting a report-specific filter (`WHERE region = 'EMEA'`) into a shared silver table; deduplicating in gold, so every gold table repeats the same window function; letting a dashboard read bronze because silver was late; storing a "cleaned" copy in bronze because it was convenient. Each of these dissolves a boundary and, with it, the guarantee. ## Do all datasets need three layers? No. A single clean, well-typed source with no duplicates may go bronze straight to gold; a large domain with six overlapping sources may justify more than one silver stage. The layers are there to place contract boundaries where responsibility changes hands, and a copy that adds no guarantee is just storage cost and one more thing to keep fresh.

  • Where does deduplication belong, and what goes wrong if you do it in gold instead?
    Deduplication belongs in silver, at the layer where the grain is first declared. Done in gold, every gold table repeats the same window function or DISTINCT, and the moment two of them diverge — different tie-break column, different ordering — two reports disagree about how many orders exist. One definition, one place, many consumers.
  • Does every dataset have to pass through all three layers?
    No. Layers exist to place contract boundaries where responsibility changes hands, not to fill a diagram. A single clean, well-typed source with no duplicates can go from bronze to gold directly; a domain fed by six overlapping systems may deserve more than one silver stage. A copy that adds no guarantee is pure cost.
  • How does bronze/silver/gold map onto staging, intermediate and marts?
    They are the same convention with different vocabulary. Staging is the thin typed layer over raw — bronze into early silver; intermediate models hold the reusable cleaning, deduplication and key resolution, which is the rest of silver; marts are gold, the consumer-facing dimensional and metric tables. Interviewers use the two vocabularies interchangeably.

Bronze is the unopened delivery crate with its packing slip, silver is the stock checked in and labelled on the shelf, gold is the finished dish on the menu.

saying these in an interview costs you the question

  • Says bronze should be cleaned and validated on ingest
  • Treats the layers as folders with no guarantees attached
  • Puts report-specific filters into shared silver tables
  • Claims every dataset must pass through all three layers
  • Says gold is just a renamed copy of silver

context

open as a page

Why is the bronze layer of a lakehouse kept immutable and append-only?

level: middleimportance: must knowfreq 62%

basics

~20 s

Because it is the only copy of what the source actually sent. Keeping it append-only lets you recompute every downstream table after a logic bug or schema change, prove whether an error came from the source or from your code, and survive sources you cannot re-read.

open as a page

How does medallion layering let you fix six months of silver tables corrupted by a bad transform?

level: seniorimportance: should knowfreq 55%

basics

~20 s

By recomputing rather than repairing. Because raw landings are retained unmodified, you fix the transform, delete and rebuild the affected window from raw, then rebuild every downstream table in dependency order. It works only if the transform is deterministic and depends on nothing mutable.

open as a page

What are the signs that a medallion lakehouse has degraded into a data swamp?

level: seniorimportance: should knowfreq 42%

basics

~20 s

Layers that add no guarantee: uncatalogued bronze nobody can interpret, silver tables with no declared grain or tests, chains of near-duplicate copies, business logic embedded in the landing layer, dashboards reading raw directly, and no owner for any of it.

open as a page

How do you decide how many medallion layers a lakehouse needs and who owns each?

level: principalimportance: should knowfreq 30%

basics

~20 s

Put a layer where responsibility changes hands and a guarantee is added, not where a diagram says three. Count the real handoffs — ingestion, conformance, business definition — give each an accountable owner with a tested contract, and delete any layer whose promise nobody can name.

open as a page

What distinguishes a silver-layer table from a bronze one beyond the naming convention?

level: middleimportance: nice to knowfreq 40%

basics

~20 s

The guarantee attached to it. A bronze table promises only fidelity to what the source sent; a silver table promises a declared grain, enforced types, resolved business keys and conformed values, backed by tests and an owner. Without that promise the name is decoration.

open as a page