SaveMyCert
Log in
5 of 5 free questions left today·for 30 a day
DP-700 · Domain 2

Ingest and transform data practice questions

Ingest and transform data is worth 33% of the DP-700 exam — the 2nd-heaviest of the 3 domains. Loading patterns, batch ingestion and transformation, and streaming data processing. Official weighting 30–35%. 6 fully worked examples are further down this page, answers included.

Exam weight
33%
the 2nd-heaviest of the 3 domains
Questions
132
across 3 topics
Free, no account
5/day
sign up free to remove the cap
Explanations
Every option
right and wrong

Build a practice session

5 free questions left today.

Domains

How many?

Mode

Ready when you are

10 fresh questions drawn across 1 of 3 domains, in Learn mode.

Focused review

Every question you answer incorrectly, and every question you flag while practising, is saved here automatically. Finish a session and you can come back to re-drill just those.

6 sample Ingest and transform data questions, fully explained

Questions from the DP-700 bank mapped to domain 2, with the answer key and the reasoning behind every option. None of them repeat the examples on the main DP-700 practice page.

Question 1Ingest and transform data

A Fabric pipeline loads a source table incrementally by filtering on its ModifiedAt column with no upper bound. The Copy activity takes about 40 minutes, and the source keeps receiving updates while it runs. After the rows are loaded into the Lakehouse, which value should the pipeline store as the watermark for the next run?

Choose one.

  • a
    The current UTC time on the pipeline, captured when the Copy activity finishes

    Rows changed during the 40-minute copy may not be in the extract, yet their ModifiedAt is earlier than the finish time, so the next run filters them out and they are never loaded. The pipeline clock is also not the source clock.

  • b
    The highest ModifiedAt value among the rows that the Copy activity extracted Correct

    The highest extracted ModifiedAt is exactly how far the load has got: everything up to it is in the destination, and any later change, including those made during the copy, has a higher value and is picked up next run.

  • c
    The lowest ModifiedAt value among the rows that the Copy activity extracted

    Nothing is lost, but the next run re-extracts almost the whole batch again, so every run reprocesses data it already loaded.

  • d
    The ModifiedAt value of the final row that the Copy activity wrote to the destination

    A copy does not write rows in ModifiedAt order, so the last row written can be older than other extracted rows; storing it re-reads some rows and is not a reliable boundary.

The concept

In the high-water-mark pattern the stored watermark is the highest change-indicator value actually loaded, taken from the extracted data in the same column the filter uses.

Why that’s the answer

Taking MAX(ModifiedAt) from the extracted rows ties the watermark to the source's own clock and to what was really captured. A clock time taken after a long copy jumps past changes that happened during the copy and were not in the extract, so they are lost. The minimum value and the last-written row are both safe from loss but re-read data, because neither marks how far the load reached.

How to reason it out
  1. Read the stored watermark at the start of the run.
  2. Extract rows with ModifiedAt greater than the stored value.
  3. Load the rows, then compute MAX(ModifiedAt) over the extracted rows.
  4. Persist that maximum in the control table only after the load succeeds.

Exam tip: Advance the watermark to the maximum change value you actually extracted, never to the pipeline's clock.

Fabric Loading Patterns: Full, Incremental, and Dimensional Model Loads — the lesson that teaches this.

Question 2Ingest and transform data

An Azure SQL Database order table receives inserts, updates and hard deletes. A data engineer loads it into a Fabric Lakehouse every hour. The analytics team requires deleted orders to disappear from the Lakehouse table within the same hour, and the table is too large to reload in full each hour. Which approach meets the requirement?

Choose one.

  • a
    Read inserts, updates and deletes from source change data capture and apply them with a MERGE Correct

    Change data capture records every operation, including deletes, from the source's log, so the MERGE can delete orders that no longer exist at the source without a full reload.

  • b
    Filter on the source LastModifiedDate watermark and MERGE the inserts and updates by OrderID

    A deleted row no longer exists in the source, so no query on LastModifiedDate can return it; the watermark load never sees the delete and the order stays in the Lakehouse.

  • c
    Enable Delta change data feed on the Lakehouse table to record inserts, updates and deletes

    Change data feed records changes made to the Delta table itself. It cannot see deletes that happen in Azure SQL Database, so the deleted orders are never removed.

  • d
    Append rows with an OrderDate in the last hour and MERGE inserts and updates by OrderID

    An OrderDate filter misses updates to older orders, and like any query-based extract it cannot return rows that were deleted at the source.

The concept

Change data capture (CDC) reads changes from the source database and yields insert, update and delete operations that a downstream load can apply. It is the standard way to propagate hard deletes incrementally, because query-based extraction only sees rows that still exist.

Why that’s the answer

The requirement has two parts: incremental (no full reload) and delete-aware. Watermark and date-filter extracts are incremental but blind to deletes. Delta change data feed is a real CDC feature, but it records changes made to the target Delta table, not changes in the source. Only source-side CDC observes the delete itself, so the load can apply it with a MERGE that has a delete clause.

How to reason it out
  1. Check whether the source has hard deletes that must reach the target; here it does.
  2. Rule out query-based extracts: a deleted row cannot be selected.
  3. Check where the change feed lives: it must be on the source, not the target.
  4. Apply the captured changes with a MERGE that includes a WHEN MATCHED delete clause.

Exam tip: Hard deletes need source CDC (or soft-delete flags, or a full reload); a watermark and target-side change feed cannot see them.

Fabric Loading Patterns: Full, Incremental, and Dimensional Model Loads — the lesson that teaches this.

Question 3Ingest and transform data

A daily batch of customer records lands in a staging table in a Fabric Lakehouse. For each record, the target Delta table must end up with the new values if the CustomerID is already present, or a new row if it is not. The engineer wants one atomic operation per batch. Which statement should the notebook run?

Choose one.

  • a
    An INSERT INTO statement that appends the staged records to the target table by CustomerID

    INSERT INTO only adds rows, so existing customers get a second row instead of having their values replaced.

  • b
    An INSERT OVERWRITE statement that replaces the target table contents with the staged records

    This replaces the whole table with today's batch, so every customer not in the batch is removed from the target.

  • c
    A MERGE statement on CustomerID that updates matched rows and inserts the unmatched rows Correct

    MERGE matches staged rows to target rows on CustomerID and applies an update or an insert per row in one atomic operation, which is an upsert.

  • d
    An UPDATE statement that joins the staged records to the target table on CustomerID

    UPDATE changes existing rows only; new customers in the batch are never inserted, so a separate insert would be needed.

The concept

MERGE (upsert) matches source rows to target rows on a key and applies WHEN MATCHED (update or delete) and WHEN NOT MATCHED (insert) actions in a single atomic operation on a Delta table.

Why that’s the answer

The requirement is update-or-insert per row in one operation, which is exactly what MERGE does. INSERT INTO duplicates existing customers, UPDATE skips new ones, and INSERT OVERWRITE replaces the table with only the current batch.

How to reason it out
  1. Identify the business key that matches staged rows to target rows: CustomerID.
  2. Map the required behaviour: matched rows are updated, unmatched rows are inserted.
  3. Use MERGE with WHEN MATCHED THEN UPDATE and WHEN NOT MATCHED THEN INSERT.

Exam tip: Update-if-present, insert-if-absent in one atomic step = MERGE.

Fabric Loading Patterns: Full, Incremental, and Dimensional Model Loads — the lesson that teaches this.

Question 4Ingest and transform data

A nightly Fabric notebook merges a staging table into a Lakehouse Delta table on OrderID. Tonight it fails with an error saying multiple source rows matched and attempted to modify the same target row. The staging table is loaded from the source system's change log. What is the cause, and what is the fix?

Choose one.

  • a
    Duplicate OrderID rows in the target table; deduplicate the target table, then rerun the MERGE

    Several target rows matching one source row do not cause this error; Delta updates each of them. The error names multiple source rows, which points at the staged data.

  • b
    Duplicate OrderID rows in the staged data; keep the latest row per OrderID, then run the MERGE Correct

    A change log records every change, so an order updated twice tonight appears twice in staging and two source rows match one target row. Keeping the latest row per OrderID (for example with row_number over ModifiedAt) removes the ambiguity.

  • c
    A missing WHEN NOT MATCHED clause; add one so that unmatched staged rows are inserted instead

    A missing insert clause means unmatched rows are skipped, not that the MERGE fails. It does not explain an error about multiple matches.

  • d
    A concurrent write to the target table; schedule the MERGE when no other job writes to that table

    A concurrent writer causes a conflict exception, not an error about multiple source rows matching one target row.

The concept

A MERGE allows each target row to be matched by at most one source row. When the source has duplicate join keys, the engine cannot choose which values to apply and the operation fails.

Why that’s the answer

A change log holds one row per change, not one row per order, so an order updated more than once since the last run appears several times in the merge source. The fix is to reduce the source to one row per key, normally the most recent change, using a window function such as row_number() partitioned by OrderID ordered by ModifiedAt descending. Duplicates in the target, a missing insert clause and concurrency each produce different behaviour.

How to reason it out
  1. Read the error: it names multiple source rows, so look at the staged data.
  2. Confirm by grouping the staged data by OrderID and finding counts above 1.
  3. Keep only the latest row per OrderID with a window function.
  4. Rerun the MERGE on the deduplicated set.

Exam tip: MERGE needs at most one source row per target row; deduplicate change sets to the latest row per key first.

Fabric Loading Patterns: Full, Incremental, and Dimensional Model Loads — the lesson that teaches this.

Question 5Ingest and transform data

A Fabric pipeline loads a daily incremental extract of changed customer rows into a Lakehouse Delta table. After transient failures the pipeline sometimes reruns and delivers the same extract again. The table must keep all previously loaded customers, and reprocessing an extract must leave it exactly as processing it once. Which write design meets this?

Choose one.

  • a
    MERGE each extract into the table on CustomerID, updating rows that already exist Correct

    A re-delivered row matches the row it created the first time and rewrites the same values, so a rerun leaves the table unchanged while earlier customers stay in place.

  • b
    INSERT INTO the table for each extract, appending its rows after each successful run

    Appending a re-delivered extract adds a second copy of every row, so the table differs after a rerun.

  • c
    INSERT OVERWRITE the table with each extract, replacing the rows that the table holds

    This is idempotent, but the extract holds only changed rows, so overwriting removes every customer loaded on earlier days.

  • d
    Append each extract, then remove duplicate customer rows from the table with a weekly job

    The table holds duplicates until the weekly job runs, so a rerun does not leave it in the same state as a single run.

The concept

An idempotent load produces the same target state whether a batch is applied once or several times. For incremental batches into Delta tables, a MERGE on the business key is the usual way to achieve it.

Why that’s the answer

Reruns and re-delivery are normal, so the write itself must absorb them. A keyed MERGE turns a repeated row into an update with identical values. Appending duplicates rows, a later cleanup leaves a window of wrong data, and overwriting is idempotent but discards everything not in the current incremental extract.

How to reason it out
  1. Note that the extract is incremental, so the table must keep rows from earlier runs.
  2. Note that a rerun must not change the table.
  3. Choose a write that matches rows on a stable business key: MERGE on CustomerID.

Exam tip: Make incremental loads idempotent with a keyed MERGE; overwrite is idempotent only for full loads.

Fabric Loading Patterns: Full, Incremental, and Dimensional Model Loads — the lesson that teaches this.

Question 6Ingest and transform data

A retail extract for a Fabric Warehouse has one row per order line with the columns OrderLineID, OrderDate, Quantity, NetAmount, ProductName, ProductCategory, StoreName and StoreRegion. The engineer is splitting it into a star schema. Which split is correct?

Choose one.

  • a
    Fact: ProductName, ProductCategory, StoreName, StoreRegion; dimensions: Quantity and NetAmount

    This reverses the roles: descriptive attributes belong in dimensions, and the numeric measures belong in the fact table.

  • b
    Fact: Quantity, NetAmount and keys to date, product and store; dimensions: the product and store columns Correct

    The fact holds the numeric measures plus a key to each dimension; product and store descriptions go into their own dimensions, and OrderDate maps to a date dimension.

  • c
    Fact: Quantity, NetAmount and the product and store columns; dimensions: one table for OrderDate

    Keeping every descriptive column on the fact row repeats product and store text on each order line, which is the denormalised extract the star schema is meant to replace.

  • d
    Fact: Quantity and NetAmount; dimensions: product and store columns, each row storing an OrderLineID

    Dimension rows do not point at fact rows. A product row is shared by many order lines, so the fact carries the dimension key, not the other way round.

The concept

In a star schema the fact table holds numeric measures at a declared grain plus foreign keys to dimensions; dimension tables hold the descriptive attributes used to filter and group.

Why that’s the answer

Quantity and NetAmount are additive measures, so they stay in the fact table at order-line grain. ProductName, ProductCategory, StoreName and StoreRegion describe who, what and where, so they move into product and store dimensions, and the fact keeps a key to each. Reversing the roles, keeping attributes on the fact, or pointing dimensions at facts all break the model.

How to reason it out
  1. Classify each column: numeric and additive (measure) or descriptive (attribute).
  2. Group descriptive columns by entity: product, store, date.
  3. Keep measures in the fact table with one key per dimension.

Exam tip: Measures plus dimension keys in the fact; descriptive attributes in dimensions.

Fabric Loading Patterns: Full, Incremental, and Dimensional Model Loads — the lesson that teaches this.

What DP-700 domain 2 tests, topic by topic

The official exam guide breaks Ingest and transform data into 3 topics. The question bank follows the same split, so a weak topic shows up as a cluster of misses you can go back and read.

Published DP-700 practice questions per topic in Ingest and transform data
TopicWhat it coversQuestions
Design and implement loading patternsSkills outline section (DP-700, as of July 21, 2026). Designing and implementing full and incremental data loads; preparing data for loading into a dimensional model; designing and implementing a loading pattern for streaming data.44
Ingest and transform batch dataSkills outline section (DP-700, as of July 21, 2026). Choosing an appropriate data store; choosing between Dataflows Gen2, notebooks, KQL, and T-SQL for data transformation; creating and managing OneLake shortcuts; implementing mirroring; ingesting data by using pipelines; transforming data by using PySpark, SQL, and KQL; denormalizing data; grouping and aggregating data; handling duplicate, missing, and late-arriving data.44
Ingest and transform streaming dataSkills outline section (DP-700, as of July 21, 2026). Choosing an appropriate streaming engine; choosing between native tables and OneLake shortcuts in Real-Time Intelligence, and between Query acceleration for OneLake shortcuts and standard OneLake shortcuts; processing data by using Eventstreams, Spark structured streaming, and KQL; creating windowing functions.44
Total132

Revise Ingest and transform data before you drill it

Other DP-700 domains

Ingest and transform data: your questions

Ingest and transform data is domain 2 of the DP-700 exam guide and carries 33% of the scored content — the 2nd-heaviest of the 3 domains. On a 55-question paper that works out to roughly 18 questions, though Microsoft Azure does not publish an exact per-domain count and individual exam forms vary.

Source

The domain weight and topic list on this page come from the official DP-700 exam guide.