Azure Data Factory Tracks Pipeline Failures, Not Schema Changes
October 8, 2026 · 6 min read
Azure Data Factory has a feature called Allow Schema Drift, and it explains most of why schema drift goes unnoticed in ADF pipelines. The setting exists so a Mapping Data Flow can keep running when the columns arriving from the source don't match what the flow was originally built against. Turn it on, and a vendor can rename a field, add a field, or drop one, and the pipeline keeps running without throwing an error. That's the entire point of the feature. It's also exactly how a renamed field or a changed data type slips into production without anyone noticing until a report comes out wrong weeks later.
The Checkbox That Explains the Whole Problem
Allow Schema Drift sits on the Source transformation inside a Mapping Data Flow. Once it's on, you can pair it with rule-based mapping or auto-mapping so the flow picks up columns it wasn't explicitly told about and routes them downstream by name pattern or position. For a lot of real-world sources, this is genuinely useful. Vendor APIs add fields constantly, and nobody wants a pipeline that breaks every time a SaaS provider ships a new optional attribute. But the feature only solves the structural half of the problem. It lets new or renamed columns pass through without an error. It does not check whether the data inside those columns still means what the pipeline assumes it means, and it has no concept of alerting anyone when a drift actually happens. The pipeline doesn't fail. It also doesn't tell you anything changed.
Turning It Off Doesn't Fix Anything Either
Some teams respond to this by leaving Allow Schema Drift off everywhere, on the theory that an explicit schema is safer. It's a reasonable instinct, but it just moves the failure mode. With the flag off, a new or renamed column either gets rejected at validation or silently excluded from the output, depending on how the Sink is configured, and a changed data type can still pass through if it's compatible with the target column: a date stored in a different format, a numeric field reinterpreted with different precision. The pipeline can still report Succeeded while quietly dropping or mangling a field. Turning the setting off trades one kind of invisible failure for another. Neither path puts a human in front of the actual change.
What the Monitoring Tab Actually Watches
Open the Monitoring tab in Data Factory and you get pipeline runs, activity runs, and trigger runs, each with a status of Succeeded, Failed, or InProgress, a duration, and whatever error message fired if something broke. Wire that up to Azure Monitor and you can alert on pipeline failure counts, activity failure counts, or run duration thresholds. All of this is useful operational telemetry, and most ADF deployments have some version of it configured. None of it answers the question that actually matters for data quality: did the data that moved through this pipeline still mean what we think it means? A Copy activity that successfully copies the wrong values, or drops a column it no longer recognizes, or silently null-fills a field that downstream systems depend on, reports exactly the same Succeeded status as a Copy activity that worked perfectly.
A Green Pipeline Run and a Wrong Report Are Not Mutually Exclusive
Picture a fairly ordinary pipeline: Salesforce to a landing zone in ADLS, then into Synapse for reporting. One afternoon, someone on the sales ops team renames a custom field, or repurposes a picklist, or a Salesforce release changes how a date field gets formatted. None of that touches Data Factory's definition of success. The Copy activity still authenticates, still pulls records, still writes files, still finishes inside its normal duration window. If schema drift is allowed, the new or changed column rides along silently. If it isn't, the column might get dropped, or the activity might apply whatever default mapping was configured when nobody was watching closely. Either way, the Monitoring tab shows green. The first real signal is usually a finance or ops analyst noticing a number that looks wrong during month-end close, long after the actual change happened upstream.
Where This Actually Shows Up
- A SaaS source adds a required field mid-quarter, and auto-mapping routes it to a column position nobody intended.
- A string field that used to hold a fixed set of status codes starts receiving a new value after a vendor changes their workflow, and every downstream join that assumes the old set quietly stops matching some rows.
- A date or timestamp format changes in the source system, and it still parses as a valid date. Just the wrong one, off by a time zone or a couple of months.
- An on-prem table behind a self-hosted integration runtime gets a column added by a DBA for an unrelated project, and the next full-load pickup grabs it under a generic default mapping.
Data Flow Debug Catches This Once, Not Continuously
Data Flow Debug is the other place people assume schema issues would surface. It's a real debugging session against live data, and it will show you the current shape of your source at the moment you turn it on. But that's exactly the limitation: it's a point-in-time check you run while building or editing a flow, not something that stays on and watches the pipeline while it runs unattended in production for the next six months. Most teams turn debug mode off once the flow ships, since it spins up its own cluster and costs money to leave running. The schema gets validated once, at build time, and then nobody looks at it again until something downstream breaks.
What Needs to Sit Next to Data Factory
None of this is really a knock on Data Factory. It was built to move data reliably and tell you when the movement itself fails, and it does that job well. Schema drift is a different problem. It needs something that knows what a field is supposed to represent, watches its actual values over time, and flags the moment they start drifting from that, independent of whether the pipeline run itself succeeded. That has to run continuously, in production, on real traffic, not as a one-time check at build time and not as a passthrough setting that quietly accepts whatever shows up next.
mmune sits above Azure Data Factory and the rest of your pipeline stack as a read-only overlay, watching the meaning of the data moving through your flows instead of just whether the activity run returned Succeeded. Find your blind spots before the next schema change finds its way into a board deck.