nerdexam
Microsoft

DP-203 · Question #183

Drag and Drop Question You are designing an Azure Data Lake Storage Gen2 structure for telemetry data from 25 million devices distributed across seven key geographical regions. Each minute, the…

The correct answer is @trigger().outputs.windowStartTime; /{YYYY}/{MM}/{DD}/{HH}_{deviceType}.json; Merge files. Explanation: Azure Data Lake Storage Gen2 Folder Structure This question tests your knowledge of Azure Data Factory (ADF) pipeline design, ADLS Gen2 partitioning strategy, and copy activity behavior for streaming telemetry workloads. --- Position 1…

Submitted by asante_acc· Mar 30, 2026Design and implement data storage

Question

Drag and Drop Question You are designing an Azure Data Lake Storage Gen2 structure for telemetry data from 25 million devices distributed across seven key geographical regions. Each minute, the devices will send a JSON payload of metrics to Azure Event Hubs. You need to recommend a folder structure for the data. The solution must meet the following requirements: Data engineers from each region must be able to build their own pipelines for the data of their respective region only. The data must be processed at least once every 15 minutes for inclusion in Azure Synapse Analytics serverless SQL pools. How should you recommend completing the structure? To answer, drag the appropriate values to the correct targets. Each value may be used once, more than once, or not at all. You may need to drag the split bar between panes or scroll to view content. NOTE: Each correct selection is worth one point. Answer:

Exhibit

DP-203 question #183 exhibit

Answer Area

Drag items

@pipeline().TriggerTime@trigger().TriggerType@trigger().outputs.windowStartTime@trigger().startTIme// {deviceID}/out/{YYYY}/{MM}/{DD}/{HH}.json/{YYYY}/{MM}/{DD}/{deviceType}.json/{YYYY}/{MM}/{DD}/{HH}.json/{YYYY}/{MM}/{DD}/{HH}_{deviceType}.jsonAdd dynamic contentFlatten hierarchyMerge files

Correct arrangement

  • @trigger().outputs.windowStartTime
  • /{YYYY}/{MM}/{DD}/{HH}_{deviceType}.json
  • Merge files

Explanation

Explanation: Azure Data Lake Storage Gen2 Folder Structure

This question tests your knowledge of Azure Data Factory (ADF) pipeline design, ADLS Gen2 partitioning strategy, and copy activity behavior for streaming telemetry workloads.


Position 1: @trigger().outputs.windowStartTime

What it fills: The dynamic expression used to timestamp data partitions in the pipeline trigger configuration.

Why this is correct: The requirement says data must be processed at least every 15 minutes. This mandates a Tumbling Window Trigger in ADF - a trigger type that fires on fixed, non-overlapping 15-minute intervals. The expression @trigger().outputs.windowStartTime returns the start time of that specific window, which is exactly what you need to correctly label which time window the output data belongs to.

Why the others are wrong:

ExpressionProblem
@pipeline().TriggerTimeReturns when the pipeline ran, not the window boundary - causes data misalignment across retries
@trigger().startTimeReturns when the trigger instance fired (wall clock), not the logical window start
@trigger().TriggerTypeReturns a string like "TumblingWindowTrigger" - not a time value at all

Position 2: /{YYYY}/{MM}/{DD}/{HH}_{deviceType}.json

What it fills: The sub-folder/file path pattern beneath the region-level root folder.

Why this is correct: The full structure would look like: /{region}/{YYYY}/{MM}/{DD}/{HH}_{deviceType}.json

  • {region} at root satisfies the access control requirement - each region's data engineers get RBAC/ACL permissions scoped to their region folder only.
  • {HH} (hour partition) is necessary because Synapse serverless SQL pools use partition pruning - queries for a 15-minute window can target a specific hour folder, avoiding full scans.
  • {deviceType} provides an additional partition dimension for Synapse queries without the explosion of files you'd get from partitioning by {deviceID} (25 million devices = 25 million tiny files per minute).

Why the others are wrong:

PathProblem
/{YYYY}/{MM}/{DD}/{HH}.jsonMissing {deviceType} - no way to filter by device type efficiently
/{YYYY}/{MM}/{DD}/{deviceType}.jsonMissing {HH} - cannot scope queries to 15-minute processing windows
// {deviceID}/out/{YYYY}/{MM}/{DD}/{HH}.json{deviceID} creates 25M+ folders - catastrophic small-files problem, ADLS namespace overhead

Position 3: Merge files

What it fills: The copy behavior setting on the ADF Copy Activity sink.

Why this is correct: Devices send one JSON payload per minute. With 25 million devices, even within a single region/hour/deviceType partition, you'd generate millions of tiny files. The Merge files option consolidates all files written to the target folder into a single output file per partition. This is critical because:

  • Synapse Analytics serverless SQL pools perform far better reading one large file than thousands of tiny ones (the classic small files problem).
  • It reduces ADLS Gen2 transaction costs and namespace metadata overhead.

Why the others are wrong:

OptionProblem
Flatten hierarchyCollapses folder structure into a flat directory - destroys the partition layout you just built
Add dynamic contentA UI action for inserting expressions, not a copy behavior option

Key Misconception to Avoid

A common mistake is confusing @trigger().startTime with @trigger().outputs.windowStartTime. The startTime is a wall-clock timestamp that shifts on retries and doesn't align to window boundaries. Always use windowStartTime when your trigger is a Tumbling Window and you need idempotent, deterministic output paths.

Topics

#Azure Data Lake Storage Gen2#Data Partitioning#Event Hubs#Synapse Serverless SQL Pools

Community Discussion

No community discussion yet for this question.

Full DP-203 Practice