Fabric and Azure
What Is a Data Lake, and How Is It Different from a Warehouse?
What a data lake is, how it differs from a warehouse and a lakehouse, and how it works on Microsoft's stack: OneLake, ADLS Gen2, Delta tables and Direct Lake.
Austin Levine
·
Updated
A data lake is a storage repository that holds data in its raw, native format, structured or not, until something needs it for analysis. Unlike a warehouse, it does not require a fixed schema before data can land in it. On Microsoft's stack, the data lake is OneLake: one lake per tenant, built into Microsoft Fabric, backed by Azure Data Lake Storage Gen2.
How a data lake differs from a data warehouse
Data warehouse | Data lake | |
|---|---|---|
Schema | Defined before you load data (schema-on-write) | Applied when you read the data (schema-on-read) |
Data shape | Structured, modeled tables | Any format: CSV, JSON, Parquet, images, logs |
Typical use | Reporting and BI on curated, modeled data | Storing raw data at low cost, from many sources |
Structure cost | Paid upfront, during modeling | Paid later, when someone queries or transforms it |
A warehouse gives you fast, consistent queries because the structure is already decided. A lake gives you flexible ingestion because it isn't, which shifts the modeling work to later in the pipeline instead of removing it.
What a lakehouse adds
A lakehouse combines a lake's cheap, flexible file storage with a warehouse's transactional guarantees. It does this with an open table format, most commonly Delta Lake: files stored as Parquet, paired with a transaction log that adds ACID transactions, schema enforcement and version history on top of files sitting in ordinary lake storage.
A Microsoft Fabric Lakehouse item is this pattern built in. It exposes two areas over the same underlying storage: a Files section for raw, unstructured data, and a Tables section where data is stored as Delta tables, queryable with either a SQL endpoint or a Spark notebook.
The Microsoft implementation: OneLake, ADLS Gen2 and Delta tables
Three pieces make up the Microsoft implementation:
OneLake is the single data lake behind every Microsoft Fabric tenant. It sits on Azure Data Lake Storage Gen2 as its underlying storage layer. Lakehouse and Warehouse data is stored in this same lake, organized by workspace and item rather than in separate, disconnected storage accounts.
Delta tables are the default table format inside a Fabric Lakehouse. Because the format is open (Parquet plus a transaction log), the same table can be read by a Spark notebook, a SQL query, or a Power BI report without copying the data between engines.
Direct Lake is the Power BI storage mode built for this shape of data. It reads Delta Parquet tables from OneLake directly into memory for a report. It does not copy the data into the model the way Import mode does, which stores a full copy of the data in the semantic model, and it does not send every query back to a source the way DirectQuery does, which queries the source live for every report interaction.
See our guide to Microsoft Fabric and Power BI for how the two products fit together, and why choose Microsoft Fabric for how OneLake fits into the rest of the platform.
A concrete example: landing and cleaning data in OneLake
A common pattern loads raw files into a Lakehouse's Files area, cleans them with a notebook, and writes the result as a Delta table:
df = spark.read.option("header", "true").csv("Files/raw/sales/2026-09-01_sales.csv")
df_clean = df.dropna(subset=["ProductID", "Quantity", "UnitPrice"])
df_clean.write.format("delta").mode("overwrite").saveAsTable("sales_clean")The CSV read comes from the Lakehouse's Files area. The write goes into the Tables area as a managed Delta table, immediately queryable by SQL or visible to a Direct Lake semantic model, with no separate export or load step.
When to reach for a data lake instead of a warehouse
Many source formats, unknown structure up front. Logs, sensor data, exports from several systems with no shared schema.
Cheap, long-term storage of raw history. Keeping the original files around for reprocessing, even after a cleaned version exists elsewhere.
Data science and exploratory work that needs the raw data, not just a modeled summary of it.
Reach for a warehouse, or a lakehouse's Tables area, once the reporting need is defined and stable enough to model. For moving data from other Azure sources into this lake, see our Data Factory showdown: Fabric vs. Azure.
FAQs
What is the difference between a data lake and a data warehouse?
A warehouse needs a defined schema before data loads and is built for consistent, fast reporting queries. A lake accepts data in its raw format and defers structure until someone reads it, which trades query consistency for flexible ingestion.
What is a lakehouse?
A lakehouse is a data lake with a transactional table format, usually Delta Lake, added on top. It keeps a lake's low-cost, flexible file storage while adding a warehouse's ACID transactions and schema enforcement.
Does Power BI connect directly to a data lake?
Yes. Power BI can query Delta tables in a Fabric Lakehouse directly through Direct Lake mode, or connect to lake storage through Power Query like any other source.
Sources
What is OneLake? - Microsoft Learn
Direct Lake overview - Microsoft Learn
Introduction to Azure Data Lake Storage Gen2 - Microsoft Learn
A data lake is a storage repository that holds data in its raw, native format, structured or not, until something needs it for analysis. Unlike a warehouse, it does not require a fixed schema before data can land in it. On Microsoft's stack, the data lake is OneLake: one lake per tenant, built into Microsoft Fabric, backed by Azure Data Lake Storage Gen2.
How a data lake differs from a data warehouse
Data warehouse | Data lake | |
|---|---|---|
Schema | Defined before you load data (schema-on-write) | Applied when you read the data (schema-on-read) |
Data shape | Structured, modeled tables | Any format: CSV, JSON, Parquet, images, logs |
Typical use | Reporting and BI on curated, modeled data | Storing raw data at low cost, from many sources |
Structure cost | Paid upfront, during modeling | Paid later, when someone queries or transforms it |
A warehouse gives you fast, consistent queries because the structure is already decided. A lake gives you flexible ingestion because it isn't, which shifts the modeling work to later in the pipeline instead of removing it.
What a lakehouse adds
A lakehouse combines a lake's cheap, flexible file storage with a warehouse's transactional guarantees. It does this with an open table format, most commonly Delta Lake: files stored as Parquet, paired with a transaction log that adds ACID transactions, schema enforcement and version history on top of files sitting in ordinary lake storage.
A Microsoft Fabric Lakehouse item is this pattern built in. It exposes two areas over the same underlying storage: a Files section for raw, unstructured data, and a Tables section where data is stored as Delta tables, queryable with either a SQL endpoint or a Spark notebook.
The Microsoft implementation: OneLake, ADLS Gen2 and Delta tables
Three pieces make up the Microsoft implementation:
OneLake is the single data lake behind every Microsoft Fabric tenant. It sits on Azure Data Lake Storage Gen2 as its underlying storage layer. Lakehouse and Warehouse data is stored in this same lake, organized by workspace and item rather than in separate, disconnected storage accounts.
Delta tables are the default table format inside a Fabric Lakehouse. Because the format is open (Parquet plus a transaction log), the same table can be read by a Spark notebook, a SQL query, or a Power BI report without copying the data between engines.
Direct Lake is the Power BI storage mode built for this shape of data. It reads Delta Parquet tables from OneLake directly into memory for a report. It does not copy the data into the model the way Import mode does, which stores a full copy of the data in the semantic model, and it does not send every query back to a source the way DirectQuery does, which queries the source live for every report interaction.
See our guide to Microsoft Fabric and Power BI for how the two products fit together, and why choose Microsoft Fabric for how OneLake fits into the rest of the platform.
A concrete example: landing and cleaning data in OneLake
A common pattern loads raw files into a Lakehouse's Files area, cleans them with a notebook, and writes the result as a Delta table:
df = spark.read.option("header", "true").csv("Files/raw/sales/2026-09-01_sales.csv")
df_clean = df.dropna(subset=["ProductID", "Quantity", "UnitPrice"])
df_clean.write.format("delta").mode("overwrite").saveAsTable("sales_clean")The CSV read comes from the Lakehouse's Files area. The write goes into the Tables area as a managed Delta table, immediately queryable by SQL or visible to a Direct Lake semantic model, with no separate export or load step.
When to reach for a data lake instead of a warehouse
Many source formats, unknown structure up front. Logs, sensor data, exports from several systems with no shared schema.
Cheap, long-term storage of raw history. Keeping the original files around for reprocessing, even after a cleaned version exists elsewhere.
Data science and exploratory work that needs the raw data, not just a modeled summary of it.
Reach for a warehouse, or a lakehouse's Tables area, once the reporting need is defined and stable enough to model. For moving data from other Azure sources into this lake, see our Data Factory showdown: Fabric vs. Azure.
FAQs
What is the difference between a data lake and a data warehouse?
A warehouse needs a defined schema before data loads and is built for consistent, fast reporting queries. A lake accepts data in its raw format and defers structure until someone reads it, which trades query consistency for flexible ingestion.
What is a lakehouse?
A lakehouse is a data lake with a transactional table format, usually Delta Lake, added on top. It keeps a lake's low-cost, flexible file storage while adding a warehouse's ACID transactions and schema enforcement.
Does Power BI connect directly to a data lake?
Yes. Power BI can query Delta tables in a Fabric Lakehouse directly through Direct Lake mode, or connect to lake storage through Power Query like any other source.
Sources
What is OneLake? - Microsoft Learn
Direct Lake overview - Microsoft Learn
Introduction to Azure Data Lake Storage Gen2 - Microsoft Learn
Show us your report nobody trusts.
1 · A 30-minute call.
2 · We look at your current reports together.
3 · We tell you what we would do.
Show us your report nobody trusts.
1 · A 30-minute call.
2 · We look at your current reports together.
3 · We tell you what we would do.
Show us your report nobody trusts.
1 · A 30-minute call.
2 · We look at your current reports together.
3 · We tell you what we would do.
CaseWhen is a Berlin BI consultancy that builds reporting that leaders can trust, on the Microsoft stack: Power BI, Fabric and Azure.
Berlin, Germany
Free tools
CaseWhen is a Berlin BI consultancy that builds reporting that leaders can trust, on the Microsoft stack: Power BI, Fabric and Azure.
Berlin, Germany
Free tools
CaseWhen is a Berlin BI consultancy that builds reporting that leaders can trust, on the Microsoft stack: Power BI, Fabric and Azure.
Berlin, Germany
