Blog Post

Fabric Updates Blog
4 MIN READ

Choosing your medallion pattern in Fabric Data Warehouse

Scirqueira's avatar
Scirqueira
Icon for Microsoft Employee rankMicrosoft Employee
1 month ago

Coauthor: Artur Vieira

Part one of a series on medallion architecture with Fabric Data Warehouse.

Medallion architecture is one of the most common patterns for organizing data in Microsoft Fabric, but successful implementations require a series of design decisions — from choosing the right architecture pattern to securing, governing, and optimizing your workloads.

In this five-part series, we'll walk through the practical choices that shape a modern medallion implementation in Fabric Data Warehouse (DW), sharing recommendations, tradeoffs, and real-world guidance along the way.

In this installment, we'll focus on the first and most important decision: choosing the right medallion pattern for your workload.


Why this matters
Most teams designing a medallion architecture in Microsoft Fabric start with the wrong question: "Should I use a Lakehouse or a Warehouse?" The better question is, "How much Spark do I actually need?" Your answer will shape everything from development workflows to security and long-term maintenance.

Quick level-set: medallion organizes data into three layers — Bronze (raw), Silver (enriched), and Gold (curated) — to progressively improve data quality and structure. That’s the whole definition you need. The interesting part is how you map those layers onto Fabric.

The key decision: Data Warehouse, Lakehouse, or both?

Fabric gives you two major analytics storage options on OneLake: Lakehouse and Data Warehouse. Because Fabric DW is an enterprise-scale SQL warehouse built on the open Delta Lake format in OneLake — combining a relational SQL engine with lake storage, so data is stored as Delta Parquet with ACID transactions and time travel — you don’t have to choose between “warehouse” and “lake.” You’re really choosing how much of the pipeline you run in T-SQL versus Spark.

That leads to two patterns worth recommending: an all-in-one or hybrid approach.

Pattern A: All-in-One Data Warehouse

Use Fabric DW for Bronze, Silver, and Gold, separated by schemas (for example Bronze.*, Silver.*, Gold.*) or by separate warehouses, with data flowing raw → curated entirely within the warehouse using T-SQL or Data Factory pipelines.

  • Best when: most of your data is structured (or can be structured on load) and your team prefers SQL-centric development.
  • Why it’s nice: one engine, one skill set, transactions and views for every hop.

Figure: Pattern A — All-in-One Data Warehouse: one warehouse, Bronze/Silver/Gold as schemas

Pattern B: Lakehouse + Warehouse Hybrid

Land raw data in a Lakehouse for Bronze (and optionally Silver), where you can use Spark for complex prep, then implement Gold in the Warehouse as the SQL serving layer for BI. This works seamlessly because OneLake underpins both — Silver or Gold data can be materialized to Delta tables and queried by the Warehouse’s SQL endpoint without copying.

  • Best when: You have unstructured or semi-structured data, or need heavy data engineering in Python or Scala.
  • Why it’s nice: The right engine for each layer — Spark for heavy prep, T-SQL for serving — with no data copying, since OneLake underpins both

Figure: Pattern B — Lakehouse + Warehouse Hybrid: raw/Bronze land in a Lakehouse, Gold is served from the Warehouse.

Which should you pick?

Here’s the rule I’d give a customer:

Rule of thumb: For most SQL-focused analytics teams, an all-in-one Fabric Data Warehouse is the pattern I’d recommend starting with. If you have a mix of unstructured data or need heavy data engineering, land and refine raw data in a Lakehouse, then serve the final Gold layer from the Warehouse.

Fabric’s architecture lets you evolve, so you’re not locked in: start all-in-warehouse and add a Lakehouse later when a new source needs Spark, or vice versa.

All-in-One DW

Lakehouse + DW Hybrid

Primary skill

T-SQL

Spark / Python + T-SQL

Best for data

Structured / relational

Unstructured, semi-structured, streaming

Bronze lives in

Warehouse staging tables

Lakehouse (raw files, delta tables or both)

Gold lives in

Warehouse

Warehouse

Pick it for

Simplicity, one engine

Flexibility, heavy engineering

One layout rule, whichever pattern you choose

Keep layer separation clear. Microsoft recommends isolating layers into different workspaces, or at least different Fabric items, for better control and governance. The payoff is real: separate items give you finer security control — only data engineers touch Bronze while analysts see only Gold — and clearer isolation, so an accidental change in Gold can’t affect Bronze.

Figure: One item per layer: Bronze, Silver, and Gold sit in separate warehouses for finer security and clearer isolation.

Takeaway

Don’t frame this as “Warehouse vs. Lakehouse.” Frame it as “How much Spark do I need?” If your workloads are structured and SQL-first, choose an all-in-one DW. If they’re unstructured or engineering-heavy, choose a hybrid approach, with Gold always served from the Warehouse. As your implementation grows, consider separating Bronze, Silver, and Gold into distinct Fabric items or workspaces to simplify governance and security.


Ready to go deeper? Explore the Microsoft Fabric documentation for Data Warehouse and OneLake, then stay tuned for Part 2 of this series, where we'll walk through howBronze, Silver, and Gold layers are implemented in practice.

This post is part of our Medallion Architecture on Fabric Data Warehouse series:

  1. Choosing your medallion pattern in Fabric Data Warehouse
  2. Building the Bronze → Silver → Gold layers
  3. Fabric DW best practices for medallion architectures
  4. Securing and governing your layers
  5. Performance tuning your medallion pipeline

In the next post, we'll explore what Bronze, Silver, and Gold layers actually look like in Fabric Data Warehouse and how data moves between them.

Updated 1 month ago
Version 2.0

10 Comments

  • What's the benefit exactly of using a warehouse for the gold layer vs a Lakehouse especially if you want to use Direct Lake on One Lake models?

  • RafalSobala's avatar
    RafalSobala
    Regular Visitor

    The Lakehouse-as-a-gold-layer approach is definitely missing, especially since we don't need an enterprise-scale solution, and we also use a semantic model that controls data integration and RLS. A Lakehouse doesn't mean 'spark-only,' as it has a SQL endpoint and MLV.

  • X99's avatar
    X99
    Regular Visitor

    Nice, but one very strong approach is missing, between Lakehouse raw/bronze and Warehouse silver, you can also use t-sql procedures to read from Lakehouse (over sql endpoint) and write to next layer in warehouse

  • Other than security, is there any benefit to separating each layer into a workspace or item as opposed to using just a single Lakehouse with 3 schemas?

    Also, any reason why Lakehouse for all 3 layers isn't listed as an option especially with MLVs technically make it possible to declaratively build silver/gold layers?

  • I have had several say they are shy about using a Warehouse much as Onelake securty is not where it needs to be vs Lakehouse.

    I have been disappointed as I would love to see Warehouses support Shortcuts the same as Lakehouses. I have had cases where I really did not need a Lakehouse and could go stragiht to a Warehouse, but I needed shortcuts across workspaces.

    Scirqueira Any updates on these things?

  • Scirqueira's avatar
    Scirqueira
    Icon for Microsoft Employee rankMicrosoft Employee

    vickydev83 Other than security, separating medallion layers into different workspaces can provide benefits such as clearer ownership boundaries, independent lifecycle management (Git and deployment pipelines), governance, and workload isolation. However, a single Lakehouse with Bronze, Silver, and Gold schemas is also a valid implementation for many scenarios. Microsoft Fabric supports medallion architecture using Lakehouses, including approaches based on Materialized Lake Views (MLVs) for declarative layer definitions and transformations.

    Regarding why the Lakehouse-only approach is not listed here, that pattern is already covered in the public guidance in Implement Medallion Lakehouse Architecture in Fabric, which describes implementing medallion architecture with Lakehouses (including one Lakehouse per layer or other Lakehouse-based patterns).
    The intent of this article is to explore deployment and architecture options specifically from a Fabric Data Warehouse perspective, rather than to repeat the Lakehouse guidance that is already documented elsewhere.
  • Scirqueira's avatar
    Scirqueira
    Icon for Microsoft Employee rankMicrosoft Employee

    vickydev83 The main benefit of using a Warehouse for the Gold layer is not Direct Lake, but rather full SQL write and governance capabilities. Unlike the Lakehouse SQL Analytics Endpoint, which is read-only, a Fabric Warehouse supports INSERT, UPDATE, DELETE, MERGE, stored procedures, and ACID multi-table transactions, making it a better fit for serving layers that require transactional logic or complex SQL-based transformations.

    However, if the primary goal of the Gold layer is to serve Power BI through Direct Lake, then a Lakehouse is equally valid. Direct Lake can consume Delta tables stored in OneLake regardless of whether they are managed through a Lakehouse or a Warehouse.

    An additional consideration is that Direct Lake on OneLake connects directly to Delta tables in OneLake and is not dependent on the SQL endpoint. This provides tighter integration with OneLake security, supports multiple OneLake sources in the same semantic model, and avoids DirectQuery fallback scenarios associated with SQL endpoints.

    So, the article recommends a Warehouse for Gold primarily when organizations want a traditional T-SQL-based data warehouse experience. For modern Fabric architectures centered around OneLake and Direct Lake, a Gold Lakehouse remains a perfectly valid and often simpler choice

  • PLHARNA's avatar
    PLHARNA
    Frequent Visitor

    Wouldn't be simpler to converge the two workloads... The Databricks pulled this off