Why start with the map?
Every DP-700 objective, from Spark settings to Eventstream tuning, assumes you know how Fabric is laid out. If you misread the layout, many scenario questions get harder than they need to be. This level gives you the map. (As covered in Level 1, this course is independent of Microsoft and not endorsed by it. Microsoft's own DP-700 study guide is free on Microsoft Learn. Check the official exam page for the current length and price. No course can promise a pass.)
If you come from SQL Server, here's an analogy: tenant is the whole company estate, capacity is the server hardware you pay for, workspace is a database-like container with its own permissions, and items are the objects inside it. The difference is that the storage under all of it is one shared lake.
Tenant → capacity → workspace → item
| Layer | What it is | What it controls |
|---|---|---|
| Tenant | Your organisation's Fabric estate | Tenant-wide policies for security and compliance |
| Capacity | A pool of compute, sized by F SKU in Capacity Units (F2 … F2048) | How much compute your workloads can use, and the region |
| Workspace | Container for items, assigned to one capacity | Ownership and access (roles, settings) |
| Item | Lakehouse, Warehouse, Eventhouse, notebook, pipeline, Dataflow Gen2… | The actual workload |
Two facts the exam relies on:
- A workspace sits on one capacity, and that capacity is tied to a specific region. You can move a workspace to a different capacity later, but at any moment its compute comes from one capacity.
- Compute and storage are separate. Capacity is what you pay for to run things. The data itself lives in OneLake.
OneLake: one lake per tenant
Every tenant gets exactly one OneLake automatically. You can't create a second one or delete it, and there is nothing to provision. Think of it as "OneDrive for data".
- It's built on Azure Data Lake Storage and supports the ADLS Gen2 APIs. Every workspace appears as a container, and each item appears as a folder inside it.
- Tabular data is stored in the open Delta Parquet format. Iceberg tables can also be read through metadata virtualisation.
- Because Spark, T-SQL and Power BI's Direct Lake mode all read the same Delta tables, you keep one copy of the data. You don't export from one engine to use the data in another.
The path to a lakehouse table looks like this:
abfss://SalesWS@onelake.dfs.fabric.microsoft.com/SalesLH.lakehouse/Tables/orders
# ^workspace = container ^item = folder ^managed Delta tables
# Files/ (sibling of Tables/) holds raw, unmanaged files: CSV, JSON, images...
Gotcha: The ABFS driver doesn't accept spaces or special characters in names in this URI. Use names like
SalesWS, or use the workspace and item GUIDs instead.
The three data stores
| Lakehouse | Warehouse | Eventhouse | |
|---|---|---|---|
| Main language | PySpark / Spark SQL | T-SQL | KQL |
| Writes via | Spark (notebooks, pipelines, Dataflow Gen2) | T-SQL DDL and DML, including multi-statement transactions | Streaming or batch ingestion into KQL databases |
| SQL access | Auto-created SQL analytics endpoint, read-only | Full read/write T-SQL | KQL querysets (SQL also possible) |
| Sweet spot | Files plus tables, big data engineering | SQL teams, dimensional models | Telemetry, logs, time series, IoT |
An Eventhouse is a container that holds one or more KQL databases, which share its compute. To let other engines read its data as Delta, you turn on OneLake availability at the database or table level.
The tools that move and transform data are also items:
- Pipelines orchestrate and copy data.
- Notebooks run Spark code.
- Dataflow Gen2 gives you low-code Power Query transformations.
Choosing between them gets its own level later.
Hands-on: workspace, lakehouse, query
1. Create a workspace. In the Fabric portal, select Workspaces → + New workspace. Name it SalesWS. Under Advanced, choose a license mode backed by Fabric capacity (a paid F SKU, or a trial). Then select Apply.
2. Create a lakehouse. Inside SalesWS, select + New item → Lakehouse and name it SalesLH. Fabric automatically creates the matching SQL analytics endpoint.
3. Load a table. Upload orders.csv to Files, then right-click it and choose Load to Tables → New table. Or do it in a notebook:
# Notebook attached to SalesLH (the default lakehouse)
df = (spark.read
.option("header", "true")
.option("inferSchema", "true")
.csv("Files/orders.csv")) # relative path into the lakehouse's Files area
df.write.format("delta").mode("overwrite").saveAsTable("orders") # lands in Tables/orders as Delta
4. Query it with Spark SQL in the same notebook:
%%sql
SELECT region, SUM(amount) AS revenue
FROM orders
GROUP BY region
ORDER BY revenue DESC;
-- region | revenue
-- North | 48210.50
-- South | 31877.00
5. Query it with T-SQL. Use the switcher at the top right of the lakehouse to change from Lakehouse to SQL analytics endpoint, then open a New SQL query:
SELECT TOP 5 order_id, region, amount
FROM dbo.orders -- same Delta files, no copy
ORDER BY amount DESC;
UPDATE dbo.orders SET amount = 0; -- FAILS: the endpoint is read-only over Delta tables
On the endpoint you can create views, functions and stored procedures. To change data, use Spark in the lakehouse, or use a Warehouse if your team wants read/write T-SQL.
Production note: The SQL analytics endpoint syncs table metadata from the lakehouse. A table you've just written may take a moment to appear there. Don't assume your Spark write failed.
What the exam asks about this
- Pick the store from the scenario. "Team only knows T-SQL and needs to
UPDATE/MERGE" points to a Warehouse. "Spark engineers with files and tables" points to a Lakehouse. "High-volume telemetry queried in KQL" points to an Eventhouse. - Expect traps based on the read-only endpoint. Any answer that writes through the lakehouse's SQL analytics endpoint is wrong.
- Know the hierarchy and the one-copy idea. One OneLake per tenant. Workspaces sit on a capacity. Items store Delta Parquet in OneLake, so other engines read the data without copying it.
Key takeaways
- Tenant → capacity (compute, region) → workspace (container, access) → item (workload).
- One OneLake per tenant. Workspaces show up as containers and items as folders, and tables are stored as Delta Parquet.
- Lakehouse = Spark plus a read-only SQL analytics endpoint. Warehouse = full read/write T-SQL. Eventhouse = KQL databases.
- The same Delta table can be queried from Spark SQL and from T-SQL without copying it.
- Eventhouse data reaches other engines as Delta once you turn on OneLake availability.