An Azure service for ingesting, preparing, and transforming data at scale.
Your proposed architecture aligns with a pattern commonly used for ERP-to-analytics integrations:
ERP/API → Azure Data Factory → ADLS Gen2 → Transformation Layer → SQL/Semantic Layer → Power BI
Keeping ingestion separated from transformation, maintaining raw and curated data layers, and designing around API limitations are all good practices that help improve maintainability, reprocessing, and auditability.
Regarding your question about incremental extraction and watermark management when the source API does not provide native change tracking, there is unfortunately no universal approach, but the following patterns are commonly used:
Last Modified Timestamp
- If the API exposes a
LastModifiedDate,UpdatedDate, or similar field, store the latest successfully processed value in a control table.- Use that value as a watermark for subsequent extractions.
- Consider using a small overlap window to account for late-arriving updates.
- Where records are created sequentially, an increasing identifier can sometimes be used as a watermark. - Store the highest processed value and retrieve records greater than that value. **Snapshot Comparison** - If no change indicator is available, land periodic snapshots in the Bronze layer and compare them against the previous extraction. - This approach increases storage and processing requirements but provides a reliable method for detecting inserts, updates, and deletes. **Hash-Based Change Detection** - Generate a hash of significant attributes for each record after ingestion. - Compare the current hash with the previous version to identify changes. - This is often implemented in the Silver layer rather than during extraction. **Combined Control Framework** - Maintain a metadata/control table containing: - Source system - Entity name - Last successful extraction time - Watermark value - Load status - Record counts - This simplifies pipeline restart and recovery scenarios.
- Use that value as a watermark for subsequent extractions.
In environments where the API offers neither timestamps nor change tracking, I generally prefer full extraction into Bronze combined with downstream change detection in Silver, as it minimizes dependency on source-system behavior and provides a reproducible history of the received data.
Have others implemented metadata-driven watermark management in ADF for APIs that lack reliable change indicators, and if so, what approach has proven most scalable in production environments?
Thanks.