MSAZ-310 · Lesson 12 of 12 · 21 min

Choosing the right Fabric item

▶ Video coming soon A video version of this lesson is on the way.

The last hub session, on the afternoon of Wednesday, November 11, had no slides. Nikolai put the list of datasets the Finch Data Hub would hold on the whiteboard and asked Ines and Keiko to decide, for each one, where it should live in Fabric and why. By then they had used lakehouses, a warehouse, shortcuts and a mirror, and had read about the other stores. The point of the exercise was the one the exams keep returning to: Fabric offers several places to keep data, they overlap, and the right choice depends on the data, the workload and the people.

The data stores side by side

Fabric has five main kinds of data store, plus two ways of using data that stays somewhere else. All of them keep their data in OneLake, so the choice is less about where bytes sit than about which engine writes the data, how it is queried and who works with it.

Fabric data stores and ways to reach outside data.
ItemBest forWritten byQueried withTypical users
LakehouseFiles and tables together, big data, data scienceSpark, pipelines, dataflowsSpark; read-only T-SQL through its endpointData engineers, data scientists
WarehouseStructured analytics with T-SQL writes and transactionsT-SQL, pipelines, dataflowsT-SQLSQL developers, analytics engineers
SQL databaseOperational applications with many small reads and writesApplications, T-SQLT-SQL; a read replica in OneLake for analyticsApplication developers
EventhouseStreaming events, logs and time seriesEventstreams, ingestionKQL; also T-SQL for some queriesReal-time analysts, operations teams
Semantic modelBusiness logic and measures for reportsRefresh, or Direct Lake readsDAXAnalysts, report authors
Mirrored databaseNear real-time copy of an external databaseMirroringT-SQL through its endpoint, SparkAnalysts of operational data
ShortcutData that should stay in another storeThe other storeThe engine of the item holding the shortcutAnyone reading it

Some older items are worth recognizing too. Power BI datamarts, an earlier self-service SQL store inside Power BI, are being replaced by warehouses, and new designs should not use them. Dataflows Gen1 have been superseded by Dataflows Gen2. Exam questions sometimes include them as tempting wrong answers.

Five questions on the left with arrows to answers on the right: files, Spark, mixed formats leads to lakehouse; a T-SQL team with writes and transactions leads to warehouse; an application that reads and writes rows leads to SQL database; events and time series seconds old leads to eventhouse; data that stays in another store leads to shortcut or mirroring.
Five questions that usually settle the choice.

The questions that decide it

Nikolai reduced the choice to a handful of questions, asked roughly in order. Is the data a stream of events that must be queryable within seconds, such as sensor readings or logs? Then it belongs in an eventhouse, whose KQL engine is built for time-based queries over very large, constantly growing tables. Is it an application's working data, with many small inserts and updates from users? Then it needs an operational database, such as the SQL database item or Azure SQL, not an analytics store. Does it already live in another system that should stay the master? Then use a shortcut if it is in an open format a shortcut can reach, or mirroring if it is in an operational database. Otherwise it is analytical data to be loaded and shaped, and the choice is between a lakehouse and a warehouse, which lesson 6 compared: a lakehouse when Spark and files dominate, a warehouse when a T-SQL team writes and transforms it. Finally, the business logic that reports use, such as measures and hierarchies, belongs in a semantic model on top.

Python Example · The decision questions applied to the hub's datasets.
def choose(d):
    if d["streaming"]:
        return "Eventhouse"
    if d["app_writes"]:
        return "SQL database (operational)"
    if d["stays_elsewhere"]:
        return "Mirroring" if d["source_is_database"] else "Shortcut"
    return "Warehouse" if d["team"] == "T-SQL" else "Lakehouse"

datasets = {
    "freezer sensor readings": dict(streaming=True,  app_writes=False, stays_elsewhere=False, source_is_database=False, team="KQL"),
    "supplier price files":    dict(streaming=False, app_writes=False, stays_elsewhere=True,  source_is_database=False, team="Spark"),
    "Finch Rewards members":   dict(streaming=False, app_writes=False, stays_elsewhere=True,  source_is_database=True,  team="T-SQL"),
    "raw StockLine extracts":  dict(streaming=False, app_writes=False, stays_elsewhere=False, source_is_database=False, team="Spark"),
    "reporting star schema":   dict(streaming=False, app_writes=False, stays_elsewhere=False, source_is_database=False, team="T-SQL"),
    "store staff scheduling":  dict(streaming=False, app_writes=True,  stays_elsewhere=False, source_is_database=False, team="T-SQL"),
}
for name, d in datasets.items():
    print(f"{name:24} -> {choose(d)}")
Output
freezer sensor readings  -> Eventhouse
supplier price files     -> Shortcut
Finch Rewards members    -> Mirroring
raw StockLine extracts   -> Lakehouse
reporting star schema    -> Warehouse
store staff scheduling   -> SQL database (operational)

What this code does

The program turns Nikolai's questions into a short chain of checks asked in order: is the data streaming, does an application write it, does it stay in another system, and if it is loaded into Fabric, is the team that shapes it a T-SQL team. Each dataset is described by yes-or-no answers to those questions, and the program prints the item each one leads to. The output gives a different home to the sensor readings, the price files, the loyalty data, the raw extracts, the star schema and the scheduling data, matching the hub's design.

The last line of the output was the one that caused debate. Store staff scheduling had come up because Grace Oduya, the store operations director, had asked whether the hub could replace the spreadsheets stores use for rotas. Nikolai's answer was that the hub could report on schedules, but the schedules themselves are an application's data, with managers editing shifts all day. That belongs in an operational database, and MSAZ-280 had already placed it in a set of Azure SQL databases. Fabric's SQL database item would also be a reasonable home, and its data is replicated into OneLake automatically for analytics, but either way it is an application database first and an analytics source second.

Items that use data rather than store it

Several Fabric items work with data without being its home, and they come up in design discussions. Notebooks and Spark job definitions run code against lakehouses. Data pipelines, copy jobs and Dataflows Gen2 move and transform data between stores. In the Data Science workload, experiments and machine learning models record training runs and register models that can score data in a lakehouse, which is where the hub's demand forecasting will eventually live. Fabric also offers AI-powered items, such as data agents that answer questions in plain language over a lakehouse, warehouse or semantic model, and Copilot experiences across workloads; these are changing quickly, depend on capacity and tenant settings, and should be checked against current documentation before they are planned in. Reports, dashboards and paginated reports present data from semantic models.

Keeping the difference between stores and the items that use them clear avoids a common design mistake: treating a dataflow or a notebook as the place where data lives. A notebook that produces a table should write that table to a lakehouse or warehouse; the notebook is the recipe, and the table is the result others depend on.

Semantic model storage modes in brief

The semantic model on top also has a choice to make about how it reads data, and the foundations matter here even though MSAZ-311 covers models in depth. In Import mode, the model copies data into its own compressed in-memory store at each refresh: fastest queries, but data only as fresh as the last refresh and a copy to keep. In DirectQuery mode, the model sends each query to the source: always current, but slower and dependent on the source's speed. Direct Lake mode, which is specific to Fabric, reads Delta tables in OneLake directly into memory when needed, without a full import and without translating queries: close to import speed with near real-time freshness, as long as the tables are well maintained and within the capacity's limits. Sales Overview will use Direct Lake over wh_sales.

The hub's design

By the end of the afternoon the whiteboard held the design that Elena approved the next morning, Thursday, November 12. It is the design the pilot will build from January.

The Finch Data Hub design, approved November 12, 2026.
DataHomeWorkspaceWhy
StockLine sales extracts, rawlh_raw (lakehouse)FDH SalesFiles as received, loaded by pipelines, reprocessed by Spark
Cleaned sales, products, storeslh_curated (lakehouse)FDH SalesSpark joins and cleaning; shared to other domains by shortcuts
Reporting star schemawh_sales (warehouse)FDH SalesT-SQL team, transactional daily loads
Sales OverviewSemantic model, Direct LakeFDH SalesMeasures and row-level security for reports
Supplier price filesShortcut in lh_rawFDH SupplyStay in the purchasing team's storage account
Finch Rewards members and pointsMirrored databaseFDH SalesOperational database kept in sync without pipelines
Freezer sensor readings (pilot store)eh_sensors (eventhouse)FDH StoresStreaming time series, alerts within minutes
Store staff schedulesNot in the hub (Azure SQL)—Application data; the hub reports on it later

Cost, skills and change

Two considerations sit behind every row of that table. The first is cost: every item consumes capacity when it runs, and some patterns cost more than others. An eventhouse that ingests continuously uses capacity all day; a mirrored database's replication uses compute and storage; a semantic model refreshed every fifteen minutes in Import mode costs far more than one read in Direct Lake. The second is skills: a design the team cannot maintain is the wrong design, however elegant. Keiko's team can maintain T-SQL procedures; Ines can maintain Spark notebooks; nobody yet knows KQL well, which is why the eventhouse is confined to one pilot store until Ines takes the real-time course.

Nikolai added a third consideration: the design will change. Mirroring will extend to StockLine after it moves to Azure SQL Managed Instance in 2027. The Stores domain may split its reports into a separate workspace if store analysts start building their own. The supplier shortcut will move to a workspace identity in January. A Fabric design is not finished on the day it is approved, and the governance habits from this course, groups for access, labels, endorsement, Git and deployment pipelines, are what let it change safely.

Worked problem

Choosing for a new request

On November 12, Marcus Feldt, the e-commerce manager, asks for two things: (1) clickstream events from harrowfinch.com, about 2 million a day, that he wants to query within a minute of a visit to spot broken pages; and (2) a weekly sales-by-category table joined with web traffic, for a report his team will build. Where should each live, and what would you check first?

Show solution
  1. (1) A continuous stream queried within a minute is the eventhouse's job: ingest through an eventstream into a KQL database, and query recent events with KQL. Check the expected volume against the capacity in the Metrics app, because continuous ingestion consumes capacity all day.
  2. (2) A weekly analytical table joined from two sources is a gold-layer table. If Keiko's T-SQL team builds it, a table in wh_sales, loaded by a procedure that reads daily web traffic summaries from the eventhouse and sales from the warehouse; if Ines builds it in Spark, a table in lh_curated.
  3. His team should reach the result through a semantic model with Build permission, as lesson 7 described, not through direct table access.
  4. Before either, check labels and ownership: clickstream data may include personal information such as IP addresses, which Carmen would want labeled and possibly excluded.

Answer: Clickstream in an eventhouse; the weekly table in the warehouse or curated lakehouse depending on who builds it; access through a semantic model; check labels first.

Looking ahead

This course has covered the platform both DP-600 and DP-700 build on. For DP-600, MSAZ-311 covers getting, transforming and modeling data, and MSAZ-312 covers enterprise semantic models and performance. For DP-700, MSAZ-320 covers loading patterns, pipelines, Spark and Delta optimization, and MSAZ-321 covers Real-Time Intelligence and monitoring of engineering workloads. Ines plans to start MSAZ-320 in December and sit DP-700 in May 2027. Keiko will take her fundamentals exam in March and start MSAZ-311 afterwards. The hub's pilot starts on January 4, 2027, on the F16 capacity in Central US, with the design in the table above.

Common mistakes

  • MistakeA warehouse is the right home for an application's working data.

    InsteadWarehouses are for analytics; an application with many small writes needs an operational database such as SQL database or Azure SQL.

  • MistakeStreaming sensor data should be loaded into a lakehouse table every minute.

    InsteadAn eventhouse is built for streaming time series and fast KQL queries over them.

  • MistakePower BI datamarts are a good choice for new self-service SQL stores.

    InsteadDatamarts are being replaced by warehouses; new designs should use a warehouse.

  • MistakeDirect Lake copies all data into the model at each refresh, like Import.

    InsteadDirect Lake reads Delta tables from OneLake as needed, without a full import.

Summary and key terms

  • Fabric's main data stores are lakehouses, warehouses, SQL databases, eventhouses and semantic models; mirroring and shortcuts reach data stored elsewhere.
  • Streaming time series go to an eventhouse; application data to an operational database; data mastered elsewhere through a shortcut or mirror.
  • Analytical data goes to a lakehouse when Spark and files dominate and to a warehouse when a T-SQL team writes it.
  • Semantic models hold business logic; Import, DirectQuery and Direct Lake trade speed against freshness.
  • Cost, team skills and expected change shape every choice.
  • Governance habits let a Fabric design change safely over time.
SQL database (Fabric)
An operational SQL database item in Fabric whose data is replicated to OneLake for analytics.
Eventhouse
A Real-Time Intelligence item holding KQL databases for streaming and time-series data.
KQL
Kusto Query Language, used to query eventhouses.
Import mode
A semantic model mode that copies data into the model at refresh.
DirectQuery mode
A semantic model mode that sends each query to the source.
Direct Lake mode
A Fabric semantic model mode that reads Delta tables from OneLake directly into memory.
Datamart
An older Power BI self-service SQL store, being replaced by warehouses.

Practice problems

Work each problem on paper first, then reveal the answer to check.

  1. Where should streaming sensor readings go?

    Show answer

    An eventhouse.

  2. Why are store staff schedules not stored in the hub?

    Show answer

    They are an application's working data with constant small edits, which belongs in an operational database.

  3. When is mirroring preferred over a shortcut?

    Show answer

    When the source is an operational database rather than files in an open format.

  4. Which semantic model mode reads Delta tables in OneLake without a full import?

    Show answer

    Direct Lake.

  5. What should replace a Power BI datamart in a new design?

    Show answer

    A warehouse.

Lesson quiz · 5 questions

Score 60% or more to complete this lesson.

Take the quiz