Fabric Data Warehouse Interview Questions
40 questions across architecture, T-SQL, performance, security, cross-querying, and migration. Verified June 2026 — includes IDENTITY Preview (Nov 2025), Data Clustering, MERGE GA, Activator integration, and the new Migration Assistant.
Senior Warehouse interviews test whether you know what changed in the last 12 months. The two highest-signal questions: “Is IDENTITY supported?” (yes, Preview Nov 2025 — most candidates still say no) and “How does MERGE work in Fabric?” (now GA — candidates who say it’s unsupported fail immediately). Also know: Data Clustering vs Z-Order, Warehouse + Activator integration (SQL-triggered real-time alerts, March 2026), and the Polaris engine eliminating distribution key decisions that Synapse required.
Warehouse Architecture
The fundamental shift from PaaS Synapse to SaaS Fabric — Polaris engine, Delta Parquet internals, the Warehouse vs Lakehouse SQL Endpoint distinction, and 2026 database convergence.
Q1
A SaaS-based relational engine supporting full T-SQL (DDL, DML, ACID transactions) with compute completely separated from storage. Storage is open Delta Parquet in OneLake rather than SQL Server’s proprietary page-based format. There are no `.mdf`/`.ldf` files, no manual index management, and no DWU scaling — capacity is governed by the F-SKU.
The separation of compute from storage means the Warehouse engine (Polaris) can scale compute independently of how much data you store. This eliminates the Synapse pattern of paying for compute headroom even when idle — Fabric bills via the F-SKU capacity model that is shared across all workloads in the workspace.
Whether you understand compute-storage separation as the foundational architectural shift — not just that “it’s serverless.” The Delta Parquet storage being open-format (readable by Spark, Databricks, external tools with permissions) is the key implication.
Q2
Warehouse: full T-SQL read/write — INSERT, UPDATE, DELETE, DDL all work. Lakehouse SQL Analytics Endpoint: read-only. You query Spark-written Delta tables using T-SQL but cannot modify data or schema from that endpoint. Both run on the same SQL engine and share OneLake storage, enabling cross-item queries via three-part naming.
| Capability | Fabric Warehouse | Lakehouse SQL Endpoint |
|---|---|---|
| INSERT / UPDATE / DELETE | ✓ Supported | ✗ Read-only |
| CREATE TABLE / ALTER TABLE | ✓ Full DDL | ✗ Auto-synced from Spark schema |
| Stored Procedures | ✓ Supported | ✗ Not supported |
| Views | ✓ Supported | ✓ Read-only views |
| Cross-item queries | ✓ Three-part naming | ✓ Three-part naming (read) |
| Primary source of truth for | SQL-first engineering (DWH pattern) | Spark-first engineering (Lakehouse pattern) |
Whether you draw the boundary precisely — “Lakehouse SQL Endpoint is read-only” is the sentence that separates candidates who know the platform from those who’ve read a summary. The follow-up is usually “why?” — because the Lakehouse schema is managed by Spark’s Delta log, not by T-SQL DDL.
Q3
Synapse Dedicated Pools use a 60-distribution architecture with explicit HASH/ROUND_ROBIN/REPLICATE distribution keys, require manual DWU scaling, and store data in a proprietary format. Fabric Warehouse uses the Polaris engine on open Delta Parquet with no distribution key definitions (Polaris manages data placement automatically) and scales via F-SKU capacity rather than manual DWU provisioning.
| Dimension | Synapse Dedicated Pool | Fabric Warehouse |
|---|---|---|
| Architecture | 60 fixed distributions, MPP | Polaris engine, serverless MPP |
| Distribution keys | Manual: HASH / ROUND_ROBIN / REPLICATE | None — engine manages automatically |
| Scaling | Manual DWU up/down (minutes) | F-SKU capacity (immediate) |
| Storage format | Proprietary clustered columnstore | Open Delta Parquet in OneLake |
| IDENTITY columns | Supported (SEQUENCES) | Preview (Nov 2025) |
| Statistics | Manual or auto (limited) | Auto + incremental refresh (Jan 2026) |
The most common migration blocker for Synapse → Fabric is removing DISTRIBUTION, CLUSTERED COLUMNSTORE INDEX, and CREATE STATISTICS hints from DDL scripts. Fabric’s Polaris engine handles all of this automatically — DDL that references Synapse-specific syntax fails at parse time, not runtime.
Whether you can list specific DDL incompatibilities, not just say “it’s different.” The DISTRIBUTION key removal is the single most common migration rewrite — candidates who’ve done this know it immediately.
Q4
Fabric Warehouse stores data as Delta Parquet in OneLake, with the Delta transaction log maintaining ACID guarantees. This enables: (1) Time Travel via T-SQL, (2) cross-engine read access (Spark, external tools with permissions), (3) Mirroring into Fabric from external databases that land data in this same format, (4) Direct Lake Power BI access to Warehouse tables without a separate copy.
The “open format” nature has a governance nuance: Spark jobs with sufficient OneLake permissions can read Warehouse tables directly, bypassing the SQL security layer. This is by design for legitimate cross-engine scenarios, but it means SQL-layer RLS doesn’t protect data accessed via Spark — only OneLake Security does at that layer.
Whether you understand the security boundary implication of open Delta storage — not just the interoperability benefit. “Delta means Spark can read it” is the easy answer; “and Spark bypasses SQL RLS” is the mature one.
Q5
Fabric Warehouse uses a distributed transaction log that writes to Delta Lake metadata (`_delta_log`) on commit. ACID compliance comes from Delta Lake’s optimistic concurrency control — each transaction reads a consistent snapshot, and conflicts are detected at commit time. There is no `.ldf` transaction log file to manage or back up; durability is handled by OneLake’s underlying storage redundancy (ZRS/GRS).
Isolation level is snapshot isolation by default — readers don’t block writers and writers don’t block readers. A long-running SELECT won’t be blocked by concurrent INSERTs to the same table, because each sees a consistent Delta snapshot. This is different from SQL Server’s default READ COMMITTED behavior and means some locking-based anti-patterns from SQL Server don’t transfer directly.
Whether you know snapshot isolation is the default — not the SQL Server default of READ COMMITTED. This matters for applications that rely on specific isolation semantics when migrating from SQL Server.
Q6
Because Warehouse tables are Delta Lake under the hood, you can query historical versions using OPTION (FOR TIMESTAMP AS OF ...) syntax. This enables point-in-time recovery without a full backup restore — query what the table looked like before an accidental DELETE, then re-insert those rows.
-- Query table state at a specific point in time SELECT * FROM dbo.Orders OPTION (FOR TIMESTAMP AS OF '2026-05-01T09:00:00') -- Recover rows accidentally deleted INSERT INTO dbo.Orders SELECT * FROM dbo.Orders OPTION (FOR TIMESTAMP AS OF '2026-05-01T08:59:00') WHERE OrderID NOT IN (SELECT OrderID FROM dbo.Orders)
Time Travel reads historical Delta versions and is limited by the Delta table’s retention window. The default retention is 7 days — rows deleted more than 7 days ago can’t be recovered via Time Travel (they’d be removed by the equivalent of a VACUUM). Adjust retention for compliance scenarios using delta.deletedFileRetentionDuration.
Whether you know the 7-day retention default and can name the recovery pattern (query historical version → re-insert). Candidates who describe Time Travel without mentioning the retention window haven’t used it for incident response.
Q7
Database Hub in Fabric (early release, FabCon March 2026) is a unified governance surface for observing and managing SQL, CosmosDB, PostgreSQL, and Fabric Database workloads at scale. Rather than navigating separate admin consoles per database type, Database Hub provides a single place for cross-database monitoring, performance insights, and governance.
The strategic significance is the “unified platform” direction announced at FabCon 2026 — Microsoft is converging transactional and analytical workloads under Fabric. Database Hub is the operational surface that makes this visible: DBAs managing SQL Server, developers using Cosmos DB, and data engineers using Fabric Warehouse all appear in the same governance plane.
Whether you know about FabCon 2026’s database convergence direction. Candidates who describe Fabric as “just an analytics platform” without acknowledging the March 2026 transactional + operational convergence reveal they haven’t tracked recent announcements.
Q8
Fabric Data Warehouse (March 2026) integrates with Fabric Activator, allowing teams to define rules directly from SQL query outputs. A query that detects an SLA breach, process failure, or threshold breach can trigger an Activator rule that fires alerts and downstream actions in real time — without exporting data to a separate monitoring system.
The pattern: a SQL Agent-style job is no longer needed to poll for conditions. Write the detection query in the Warehouse, attach an Activator rule to it, and the rule evaluates continuously. When the condition is met, Activator sends an alert (email, Teams message) or triggers an action (another pipeline, a webhook). This makes the Warehouse an active participant in business operations rather than a passive data store.
Whether you see the Warehouse as an operational tool, not just an analytics store. The Activator integration is the clearest signal of Fabric’s “translytical” direction in the Warehouse specifically — candidates who mention it signal current platform knowledge.
T-SQL Development & Limitations
The T-SQL surface area changed significantly in 2025 — IDENTITY in Preview, MERGE GA, constraints still unenforced. Know the current status precisely.
Q9
Yes, as of November 2025 Preview. IDENTITY columns in Fabric Data Warehouse automatically generate unique values per row and maintain uniqueness across parallel ingestion jobs in the distributed engine. The original workaround of using ROW_NUMBER() or MAX(ID) + 1 is no longer required for new implementations.
-- IDENTITY column in Fabric Warehouse (Preview, Nov 2025) CREATE TABLE dbo.Orders ( OrderID INT IDENTITY(1,1) NOT NULL, OrderDate DATE NOT NULL, CustomerID INT NOT NULL, Amount DECIMAL(18,2) NOT NULL ) -- Engine guarantees uniqueness even when multiple -- parallel COPY INTO jobs insert simultaneously
For pipelines written before November 2025 using ROW_NUMBER()-based surrogate keys, no immediate change is required. IDENTITY Preview is most useful for new table designs. For production migration decisions, confirm GA status before architectural commitment since Preview features can change.
Currency of knowledge — this is the single highest-signal question in this module. The candidate who still says “IDENTITY is not supported” is demonstrating outdated preparation. The correct answer names both the Preview status (Nov 2025) and the parallel-safety guarantee.
Q10
Defined but not enforced. You can declare PRIMARY KEY, FOREIGN KEY, and UNIQUE constraints in DDL for documentation and query optimizer hints — the optimizer uses them for join strategy decisions. But the engine does not validate uniqueness or referential integrity at write time. Data quality must be enforced in the ETL pipeline before data enters the Warehouse.
The optimizer hint value is real: declaring a PRIMARY KEY on your surrogate key column tells the query optimizer that it’s unique, which enables better join and aggregation plans. Without this hint, the optimizer must assume duplicates are possible and plans more defensively. Declare constraints even knowing they aren’t enforced — the documentation and optimizer benefit are both worth having.
Whether you know both facts: not enforced AND useful for the optimizer. Candidates who only say “not enforced” miss the optimizer hint value. Candidates who say “they’re enforced” are wrong entirely.
Q11
Yes — MERGE entered Preview in Fabric Data Warehouse in September 2025 and is now GA. It provides conditional DML: INSERT, UPDATE, and DELETE in a single statement based on a match condition. This is the standard T-SQL pattern for implementing SCD Type 1 and upsert logic without separate INSERT/UPDATE statements.
MERGE INTO dbo.Customers AS target USING staging.CustomerUpdates AS source ON target.CustomerID = source.CustomerID WHEN MATCHED THEN UPDATE SET target.Name = source.Name, target.Email = source.Email, target.Updated = GETUTCDATE() WHEN NOT MATCHED BY TARGET THEN INSERT (CustomerID, Name, Email, Updated) VALUES (source.CustomerID, source.Name, source.Email, GETUTCDATE()) WHEN NOT MATCHED BY SOURCE THEN DELETE;
Whether you know MERGE is now GA — not unsupported. Candidates who say “MERGE isn’t available, use separate INSERT/UPDATE” are giving a 2024 answer. The follow-up question is usually a MERGE scenario (SCD Type 1, SCD Type 2, or CDC upsert) — have a concrete use case ready.
Q12
Yes — Stored Procedures, Views, and inline Table-Valued Functions are all supported. This allows substantial business logic to migrate from SQL Server or Synapse with relatively limited changes, provided the procedures don’t use unsupported T-SQL constructs (cursors, OPENQUERY, temp table loops).
For procedures that use IDENTITY-based sequence generation: update them to use the native IDENTITY column (Preview) rather than the MAX(ID) + ROW_NUMBER() workaround. For procedures that use MERGE: those now work directly. The remaining migration work focuses on cursors and row-by-row processing patterns — replace with set-based equivalents for both correctness and performance.
Whether you know what’s specifically not supported rather than just listing what is. Cursor-based row-by-row patterns are the most common migration blocker in stored procedure porting.
Q13
COPY INTO loads data from external files (CSV, Parquet in ADLS, OneLake) in parallel across compute nodes — it’s the primary high-throughput ingestion path. INSERT INTO ... SELECT works but is slower for large file loads because it’s processed as a standard DML statement without the parallel file reader optimization.
COPY INTO dbo.SalesFact FROM 'https://myaccount.dfs.core.windows.net/gold/sales/*.parquet' WITH ( FILE_TYPE = 'PARQUET', CREDENTIAL = ( IDENTITY = 'Managed Identity' ) ) -- Parallelizes across all Parquet files matching the glob -- Significantly faster than INSERT INTO ... SELECT for bulk loads
Whether you know COPY INTO as the primary bulk ingestion pattern and can explain why (parallel file readers). Candidates who only mention INSERT or Data Factory pipeline inserts for bulk loads are missing the recommended pattern.
Q14
Fabric Warehouse exposes a T-SQL endpoint compatible with the dbt-fabric adapter. Configure the profile with the Fabric Warehouse’s SQL connection string, run dbt run, and dbt executes models as SQL transformations inside the Warehouse. dbt materializations (table, view, incremental) all work against the Warehouse T-SQL surface.
The incremental materialization in dbt with Fabric Warehouse uses the MERGE statement natively (now GA) or INSERT OVERWRITE pattern depending on configuration. For large historical tables, incremental dbt models are significantly more efficient than full rebuilds — combine with the unique_key configuration to trigger MERGE-based upserts. See our dbt Best Practices guide for Fabric-specific patterns.
Whether you know dbt works via the T-SQL endpoint and whether you connect MERGE GA to the dbt incremental materialization improvement. Candidates who say “dbt doesn’t support Fabric” haven’t checked the current adapter status.
Q15
Fabric Warehouse enforces schema-on-write — a COPY INTO or pipeline write with an incompatible structure fails at load time, not silently. Handle schema drift with: (1) pre-load metadata check against INFORMATION_SCHEMA.COLUMNS, (2) dynamic ALTER TABLE ... ADD COLUMN for additive changes, (3) a staging table approach that always accepts raw data before applying schema checks.
-- Check if source column exists in target IF NOT EXISTS ( SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Orders' AND COLUMN_NAME = 'NewSourceColumn' ) BEGIN ALTER TABLE dbo.Orders ADD NewSourceColumn NVARCHAR(255) NULL END
Whether you have a proactive schema drift strategy — not “it fails and we fix it.” The pre-load metadata check pattern shows you’ve thought through the ETL design before encountering the problem in production.
Q16
Fabric Data Agents reached GA at FabCon March 2026. The Warehouse now has a direct “Create Data Agent” entry point in its ribbon — connecting a Warehouse to a Data Agent takes one click rather than manual configuration. Data Agents act as virtual analysts: they accept natural language questions and generate SQL against the Warehouse to answer them.
For SQL teams, the practical implication is that business users can query Warehouse data via conversational interfaces without learning T-SQL, while the underlying security model (RLS, column permissions) still governs what data the agent can surface. The agent executes T-SQL on behalf of the user and respects their permissions — it’s not a bypass.
Whether you know Data Agents are GA (not preview) and understand they respect existing SQL security. Candidates who see agents as a security concern without knowing the permission inheritance reveal a misunderstanding of how they work.
Performance Tuning in Fabric Data Warehouse interview questions
Result Set Caching, Data Clustering (the new ingestion-time layout feature), incremental statistics, CTAS patterns, and monitoring slow queries via DMVs.
Q17
Result Set Caching (Preview, 2025) stores the output of a query in the Warehouse. Identical subsequent queries against unchanged underlying data return instantly from cache — consuming zero compute. Effective for repetitive dashboard queries that hit the same aggregations. Cache is invalidated when the underlying Delta table version changes.
Limits: the cache key is the exact query text — even whitespace differences or different parameter bindings create cache misses. For parameterized queries, this means each unique parameter value creates a separate cache entry. Cache is per-workspace and has a storage limit; the engine evicts entries based on LRU if limits are reached. Enable via session or workspace settings.
Whether you know the exact query text requirement. This is where many candidates say “it caches the result” without knowing that “SELECT * FROM Sales WHERE Year = 2025” and “select * from Sales where year = 2025” are different cache keys.
Q18
Data Clustering (Preview, November 2025) organizes rows with similar column values together during ingestion, enabling aggressive Parquet file pruning when those columns appear in query predicates. Unlike Z-Order (which requires a separate OPTIMIZE ZORDER BY run on existing data), Data Clustering is applied at write time — no separate maintenance step.
| Dimension | Data Clustering | Z-Order |
|---|---|---|
| When applied | At ingestion time (write) | Post-ingestion via OPTIMIZE run |
| Maintenance | Self-maintaining per write | Requires periodic manual OPTIMIZE |
| Availability | Fabric Warehouse (Preview Nov 2025) | Spark/Lakehouse (longstanding) |
| Column limit | Typically 1–4 clustering columns | Multiple Z-Order columns (diminishing returns beyond 3) |
| Best for | New Warehouse tables with known filter columns | Existing Spark-written Delta tables |
Pick columns that appear in WHERE clause filters and JOIN conditions for your most important queries. Date/period columns (Year, Month, Quarter) and high-cardinality ID columns used as join keys are typical candidates. Avoid columns with very low cardinality (boolean, status with 3 values) — clustering gains are minimal when few distinct values exist.
Whether you know this feature exists (Nov 2025) and can articulate the ingestion-time vs post-ingestion distinction from Z-Order. It’s the clearest signal that a candidate is tracking the platform in 2026.
Q19
Incremental Statistics Refresh (January 2026) re-samples only the newly added rows since the last statistics update, rather than re-scanning the full column. Applies to tables that experience mostly INSERT or APPEND operations. Reduces the time statistics maintenance contributes to SELECT query execution on long, append-heavy tables.
For a Sales fact table that grows by 1M rows per day but has 10B existing rows: full statistics re-sample requires scanning all 10B rows. Incremental refresh scans only the new 1M rows. The practical result: statistics stay accurate without the full-scan cost, and auto-stats updates no longer noticeably delay queries on large append-only tables.
Whether you know this feature exists and can articulate when it applies (INSERT/APPEND-heavy tables only). It doesn’t help tables with frequent UPDATEs or DELETEs — those still require full re-sample.
Q20
V-Order is primarily a VertiPaq (Power BI Direct Lake) optimization, but it benefits the Warehouse SQL engine indirectly. V-Ordered Parquet files have better dictionary encoding and column statistics that improve IO efficiency during large table scans in SQL. The improvement is secondary to its Direct Lake benefit — don’t enable V-Order solely for SQL performance if write speed on Gold tables matters.
For tables read by both Direct Lake Power BI and T-SQL queries (a common Gold layer pattern), enabling V-Order on those tables provides a double benefit. For tables used only by SQL queries (staging, raw), the write overhead of V-Order is wasted cost without meaningful read payoff.
Whether you understand V-Order’s primary vs secondary benefit context. Candidates who say “enable V-Order everywhere” or “V-Order is only for Power BI” are both partially wrong. The correct answer is table-purpose-specific.
Q21
The Polaris engine handles data placement — no manual HASH/ROUND_ROBIN hints needed. Optimize joins by: (1) building a proper star schema (dimension tables small, fact tables large), (2) ensuring statistics are current on join columns so the optimizer chooses the right join algorithm, (3) avoiding joins on VARCHAR(MAX) columns, (4) using Data Clustering on the join key column of large fact tables.
For large fact-to-large-fact joins: these are inherently expensive in any engine. Consider pre-aggregating in a staging table or materializing the join result via CTAS if it’s executed repeatedly. The absence of manual distribution key control means you can’t force co-location of two large tables — if this is a genuine bottleneck, materializing the join is the right architectural decision rather than trying to hint the engine.
Whether you can reason about join optimization without the Synapse distribution key mental model. Candidates who say “I’d use HASH distribution to co-locate” are applying Synapse thinking to Fabric — a clear migration anti-pattern signal.
Q22
CTAS physically materializes a complex aggregation or join result into a new table. Use it when: (1) a complex query runs repeatedly and Result Set Caching doesn’t apply (parameter variation), (2) an aggregation is queried by multiple downstream consumers, (3) a view would be queried enough times that on-the-fly computation is expensive. CTAS is the Fabric equivalent of a Synapse Materialized View when needed.
-- Materialize daily sales aggregation for reporting CREATE TABLE reporting.DailySalesSummary AS SELECT CAST(OrderDate AS DATE) AS SaleDate, Region, SUM(Amount) AS TotalRevenue, COUNT(1) AS OrderCount FROM dbo.Orders GROUP BY CAST(OrderDate AS DATE), Region -- Truncate + reload on each pipeline run -- or MERGE for incremental updates using MERGE GA
Whether you know CTAS as the explicit materialization pattern and can connect it to the MERGE GA feature for incremental updates. Candidates who combine CTAS (for initial build) with MERGE (for daily incremental) are showing production-ready thinking.
Q23
Three surfaces: (1) Query Activity hub in the Fabric portal — shows active and recent queries with durations, (2) DMVs: sys.dm_exec_requests for active queries, sys.dm_pdw_exec_requests for history, (3) Capacity Metrics App for understanding CU consumption per query. For query plan analysis, use DAX Studio or connect SSMS via the SQL connection string and examine estimated execution plans.
SELECT request_id, status, submit_time, DATEDIFF(SECOND, submit_time, GETDATE()) AS elapsed_sec, command FROM sys.dm_pdw_exec_requests WHERE status = 'Running' OR DATEDIFF(MINUTE, submit_time, GETDATE()) < 60 ORDER BY elapsed_sec DESC
Whether you know the three monitoring surfaces and can navigate between them for different diagnostic needs. Portal Query Activity for quick triage; DMVs for scripted automation; Capacity Metrics for cost attribution. Candidates who only know one surface have surface-level monitoring experience.
Q24
In Synapse, you scaled manually by changing DWU (1 minute to 5 minutes per operation). In Fabric, the Warehouse draws from the shared F-SKU capacity pool automatically — no manual scaling action. For query concurrency issues, the resolution is either (1) upgrading the F-SKU, (2) enabling Autoscale Billing for burst workloads, or (3) scheduling heavy batch queries during off-peak hours.
The smoothing mechanism: F-SKU capacity is averaged over 24 hours. A heavy ETL job that runs for 2 hours doesn’t immediately throttle interactive queries — it borrows from the overnight idle window. But sustained concurrent load during business hours with no idle slack can cause throttling. Monitor in the Capacity Metrics App and compare peak vs trough utilization to size correctly.
Whether you know there’s no DWU knob to turn — the resolution paths are SKU upgrade, Autoscale Billing, or workload scheduling. Candidates who say “scale up the DWU” are applying Synapse thinking.
Security & Governance
T-SQL security layer (RLS, CLS, Dynamic Masking), the Spark bypass gap, Purview auditing, and item-level sharing.
Q25
Standard T-SQL RLS via Security Policy and an inline predicate function. Define the function to filter rows based on the executing user’s identity, attach it as a Security Policy on the table, and every query automatically applies the filter. This works for T-SQL queries via the SQL endpoint — it does NOT protect data accessed via Spark directly on the underlying Delta files.
-- Step 1: Create the predicate function CREATE FUNCTION security.fn_RegionFilter(@Region VARCHAR(50)) RETURNS TABLE WITH SCHEMABINDING AS RETURN SELECT 1 AS fn_result WHERE USER_NAME() = 'Admin' OR @Region = USER_NAME() -- Step 2: Apply the security policy CREATE SECURITY POLICY SalesRegionPolicy ADD FILTER PREDICATE security.fn_RegionFilter(Region) ON dbo.SalesFact
SQL-layer RLS applies only to queries routed through the SQL analytics endpoint. A Spark notebook or a Python client with direct OneLake storage permissions reading the Delta files directly bypasses the SQL RLS policy entirely. For data that requires row-level protection regardless of access path, use OneLake Data Access Roles — these apply at the storage layer and protect against all access vectors.
Whether you know the Spark bypass gap without being prompted. This is the security risk that separates architects who understand the full Fabric stack from those who only know SQL security patterns.
Q26
Column-Level Security (CLS): DENY SELECT on specific columns to specific roles — unauthorized users get an error if they reference the column. Dynamic Data Masking (DDM): the column is readable but the value is obfuscated (partial mask, email mask, random number) — unauthorized users see the mask, not an error. CLS for strict access control; DDM for softer obfuscation where acknowledging the column exists is acceptable.
A common production combination: apply DDM on a phone number column so analysts see a partial value, and apply CLS on the full SSN column so analysts can’t reference it at all. The distinction matters for GDPR compliance conversations — DDM doesn’t satisfy “right to erasure” because the data still exists; CLS doesn’t either. Both are access controls, not data removal mechanisms.
Whether you can articulate the behavioral difference (error vs masked value) and match each to the right compliance scenario. Candidates who describe them as interchangeable haven’t implemented both in production.
Q27
Workspace roles (Admin/Member/Contributor/Viewer) grant broad access to all items in the workspace. Item-level sharing via the Warehouse “Share” button grants access to a specific Warehouse only — the user can connect via SQL without being in the workspace at all. Item sharing is the right model for external analysts or BI tools that need SQL access to one Warehouse but nothing else in the workspace.
Combine both: workspace Contributor for the data engineering team (they need to write pipelines, create items), item-level sharing for the BI team (they need SQL read on the reporting Warehouse only, not the staging Warehouse). Never add BI users as workspace Members just for Warehouse access — that grants more permissions than needed.
Whether you apply least-privilege thinking specifically to Fabric’s dual permission model. The ability to explain when item sharing beats workspace roles — and vice versa — signals you’ve designed production access models, not just studied documentation.
Q28
Fabric integrates with Microsoft Purview for audit logging. Purview captures who ran which SQL query, from which application, at what time, and what data was accessed. This satisfies audit requirements for regulated industries where you need to prove who accessed sensitive data and when.
Within the Warehouse itself, the Query Activity hub provides recent query history but has a limited retention window — not suitable for compliance audit purposes. For long-term audit retention, configure Purview audit log export to Azure Monitor or Event Hub and set retention policies according to your compliance requirements (SOX, HIPAA, GDPR).
Whether you distinguish between operational monitoring (Query Activity hub, short retention) and compliance auditing (Purview, long-term retention). Candidates who say “use the Query Activity hub for auditing” don’t understand audit trail retention requirements.
Q29
Warehouse security uses T-SQL GRANT/DENY/RLS/DDM at the SQL engine layer. Lakehouse security uses OneLake Data Access Roles at the storage layer plus SQL security on the SQL Endpoint. OneLake-layer security is stronger for multi-engine scenarios because it protects against all access paths (SQL, Spark, external tools), not just T-SQL queries.
For sensitive PII data that might be accessed by multiple engines, the right architecture is OneLake Data Access Roles at the storage layer (protecting all paths) with SQL-layer RLS for fine-grained row filtering in T-SQL contexts. Relying on T-SQL security alone in a mixed-engine workspace is a governance gap.
Whether you can compare the protection scope of each security layer. “T-SQL RLS is application-layer security; OneLake Security is storage-layer security” is the precise framing that earns the point.
Q30
No native backup/restore command like SQL Server’s BACKUP DATABASE. Data durability comes from OneLake’s ZRS/GRS storage redundancy. Point-in-time recovery is handled by Delta Time Travel (within the retention window). For schema-only backup: script out DDL via SSMS or Information Schema queries. For data recovery from accidental deletes: Time Travel.
This is a significant mindset shift from traditional SQL Server DBAs who rely on backup files. In Fabric, the “backup” is the storage platform’s geo-redundancy (OneLake GRS) plus Delta’s version history. A formal DR plan should include: DDL in Git, data in GRS-protected OneLake, and Delta retention window calibrated to your recovery point objective.
Whether you’ve moved past the BACKUP DATABASE mental model. Candidates who say “I’d schedule backup jobs” reveal they haven’t understood Fabric’s storage architecture — durability is built into the platform, not a DBA procedure.
Cross-Querying Strategy
Three-part naming for Lakehouse-Warehouse joins, cross-workspace via Shortcuts, cross-tenant via delegated Shortcuts (March 2026), performance considerations, and abstraction patterns.
Q31
Three-part naming: [LakehouseName].[schema].[table] within a T-SQL query on the Warehouse. Both items must be in the same workspace and the executing user must have read access to both. No ETL required — the SQL engine reads the Lakehouse’s Delta Parquet files directly.
-- Sales data is in the Warehouse; Logs are in the Lakehouse -- No ETL needed — single T-SQL query across both SELECT s.OrderID, s.Amount, l.EventType, l.EventTimestamp FROM dbo.SalesFact s JOIN [SalesLakehouse].[dbo].[WebLogs] l ON s.SessionID = l.SessionID WHERE s.OrderDate >= '2026-01-01'
Whether you know the exact three-part naming syntax and the same-workspace requirement. Candidates who describe this as requiring an ETL step or a Linked Service (Synapse concept) are applying the wrong platform mental model.
Q32
Cross-workspace: create a Shortcut in the local Warehouse pointing to the remote Warehouse or Lakehouse item. The Shortcut appears as a local table and can be queried via three-part naming. Cross-tenant (delegated Shortcuts, coming soon as of March 2026): OneLake now supports creating Shortcuts to other tenants via delegated Entra identity — enabling cross-tenant data access without data duplication.
The read-only limitation applies to Shortcut-backed cross-workspace queries: you can’t UPDATE or DELETE data in a remote workspace via a Shortcut. Data modification must happen in the source workspace. If bidirectional write access is needed across workspaces, you need a pipeline, not a Shortcut.
Whether you know the read-only constraint on cross-workspace queries via Shortcuts and the emerging cross-tenant delegated Shortcut capability from FabCon 2026. Both signal current platform knowledge beyond the basic cross-query pattern.
Q33
Key limitations: (1) Remote sources via three-part naming are read-only — no DML against a Lakehouse table from a Warehouse query, (2) both items should be in the same Fabric region (cross-region adds latency and potential cost), (3) the executing user needs permissions on both the local Warehouse AND the remote Lakehouse/Warehouse SQL Endpoint, (4) statistics on the remote table may be incomplete, affecting query plan quality.
Whether you name all four limitations without prompting. Most candidates stop at “read-only.” The statistics caveat (remote table stats may be stale or absent, leading to poor join plans) is the production gotcha that reveals real cross-query experience.
Q34
A View encapsulates the three-part name inside the Warehouse: CREATE VIEW v_WebLogs AS SELECT * FROM [SalesLakehouse].[dbo].[WebLogs]. BI tools, dbt, and report developers query v_WebLogs without knowing the source is a Lakehouse. If the source moves to a different Lakehouse or the schema changes, you update the View — not every downstream query.
This abstraction also simplifies permission management: grant access to the View rather than requiring users to have permissions on both the Warehouse and the remote Lakehouse. The View owner’s permissions are used to resolve the remote reference (depends on schema authorization configuration).
Whether you frame Views as a maintenance and permission simplification tool — not just syntax sugar. The “update the View, not every query” argument is the architectural justification.
Q35
Performance is generally high because no data movement occurs — the SQL engine reads Parquet files from OneLake directly. But: (1) joining two massive tables from different items may trigger a cross-item shuffle with significant overhead, (2) filter pushdown to remote Lakehouse tables depends on statistics availability, (3) the V-Order status of the remote table affects read efficiency.
Mitigation: ensure statistics are current on remote table join columns, enable V-Order on Lakehouse Gold tables that are frequently joined from the Warehouse, and consider materializing heavily-used cross-item joins into a Warehouse table via CTAS if query latency is unacceptable after tuning.
Whether you understand that “no data movement” doesn’t mean “no performance cost.” The cross-item shuffle overhead and statistics dependency are real production concerns — candidates who say “it’s fast because data stays in OneLake” are missing the full picture.
Q36
Both items in the same workspace. Write a T-SQL query in the Warehouse using three-part naming to reference the Lakehouse SQL Endpoint. Ensure the user has SQL read access to the Lakehouse endpoint. Optionally, create a View in the Warehouse to abstract the Lakehouse reference. No ETL pipeline, no data movement, no duplication.
Security check before running: confirm RLS/CLS on the Lakehouse SQL Endpoint is appropriate for this cross-item access. The user executing the Warehouse query needs read permissions at the Lakehouse SQL Endpoint level — workspace Viewer isn’t always sufficient if item-level permissions are configured more granularly.
Whether your answer includes the security permission verification step — not just the query syntax. Missing this in a scenario answer signals you describe the happy path without the production considerations.
Migration Scenarios
Migration from Synapse Dedicated Pools and SQL Server, using the 2026 Migration Assistants, zero-downtime strategies via Mirroring, and data consistency validation.
Q37
Export data to Parquet in ADLS, load via COPY INTO. Rewrite DDL to remove Synapse-specific syntax. Use the Fabric Migration Assistant for SQL databases (FabCon March 2026) which imports schemas via DACPACs, identifies T-SQL compatibility issues with AI assistance, and guides assessment and data copy workflows — significantly reducing manual rewrite effort.
Common DDL rewrites required:
- Remove
DISTRIBUTION = HASH(col),ROUND_ROBIN,REPLICATE— Polaris manages placement automatically - Remove
CLUSTERED COLUMNSTORE INDEX— Parquet handles columnar storage - Remove or refactor
CREATE STATISTICShints — Fabric auto-stats handles this - Update
IDENTITYusage — now in Preview, syntax is compatible - Replace
TOP WITH TIESpatterns and certain windowing syntax that Fabric doesn’t support
The new Fabric Migration Assistant for SQL databases imports schemas through DACPACs, identifies and resolves compatibility issues with AI assistance, and guides teams through assessment and data copy workflows. This complements the earlier ADF/Synapse pipeline migration assistant. Run the assessment before committing to a migration timeline — it surfaces blockers you won’t find by reading documentation.
Whether you know the FabCon March 2026 Migration Assistant and can list the specific DDL removals. Candidates who say “export to Parquet and re-create tables” without naming the assistant or the specific syntax gaps reveal they haven’t done a real migration.
Q38
For Azure SQL DB, SQL Server, or Snowflake sources: enable Mirroring to replicate the source database into Fabric OneLake in near-real-time via CDC. Once the mirror is caught up, point BI tools and downstream consumers to the Fabric Warehouse SQL endpoint. Cutover is a connection string change, not a batch migration window.
The pattern: (1) Enable Mirroring — source and Fabric run in parallel, (2) migrate and test reporting against Fabric (BI tools connect to Fabric, validate against source), (3) at cutover, redirect application writes to the source (Mirroring handles the Fabric sync), (4) when ready to decommission the source, repoint application writes to Fabric SQL directly. The mirror eliminates the “big bang” migration window where the source is unavailable.
Data mirrored from Azure SQL DB lands in Fabric as read-only Delta tables. To use them as writable Warehouse tables post-migration, the application must eventually repoint its write traffic to the Fabric SQL endpoint directly. Mirroring is a migration helper, not a permanent architecture for write traffic.
Whether you understand Mirroring’s read-only constraint during the parallel-run phase and the eventual write-traffic repointing step. Candidates who describe Mirroring as a permanent architecture for bidirectional sync are misunderstanding the tool.
Q39
Three checks in order: (1) Row counts per table — source vs Fabric, (2) Aggregation checksums — SUM(Amount), COUNT(OrderID) by key dimensions, (3) Sample record comparison — specific known records validated field by field. Automate in a Fabric Notebook or Data Pipeline that runs both source and target queries and compares results.
-- Run in both source and Fabric; compare results SELECT COUNT(1) AS RowCount, SUM(Amount) AS TotalRevenue, MIN(OrderDate) AS EarliestOrder, MAX(OrderDate) AS LatestOrder, CHECKSUM_AGG(CHECKSUM(OrderID, Amount)) AS DataChecksum FROM dbo.Orders
Whether you have a structured validation sequence — row count, then aggregation, then sample — and whether you know to automate it. Candidates who say “we’d eyeball some records” haven’t migrated a production system.
Q40
No direct DWU-to-F-SKU mapping formula exists. Run a pilot: migrate representative workloads (not just the simplest ones) to a trial F-SKU, run the Capacity Metrics App for 2–4 weeks of typical query patterns, and observe peak CU utilization and smoothing behavior. Size the production F-SKU with 20–30% headroom above observed peak.
The workload mix matters more than the raw data size. A Synapse deployment at 1,000 DWUs handling mostly light concurrent queries may run comfortably on F32. The same DWU count handling complex multi-table joins with 50 concurrent users may need F64 or higher in Fabric. DWUs and CUs measure fundamentally different resource models — don’t use conversion tables, use the pilot.
For workloads with highly variable query volume (low during most of the day, heavy during business hours), Autoscale Billing lets the Warehouse burst beyond the base F-SKU without manual scaling — billed per-second for actual burst compute. This can eliminate over-provisioning for peak capacity at the cost of variable billing. Run the pilot against both a fixed F-SKU and with Autoscale enabled to compare total cost.
Whether you know there’s no reliable formula and recommend a pilot — and whether you mention Autoscale Billing as the variable-load option. Candidates who give a specific DWU-to-CU conversion ratio are making up numbers that don’t exist.
Warehouse done. Pipelines, Dataflows, and orchestration are next.
Start ETL Questions →


