Morrow CreekData Services
← Morrow Creek Data Journal

Schema drift in plain English: when the shape of data changes underneath you

Zachery Knowles
Zachery KnowlesFounder, F.R.A.R.Y. Data Technologies LLC

A data file can look familiar, load without complaint, and still stop meaning what your process assumes it means.

That is the practical risk of schema drift: the structure of incoming data changes. A monthly spreadsheet that once contained customer_id, region, and annual_revenue might arrive with customerId, no region, and revenue stored as text. The file still opens. But the agreement between the system supplying the data and the people relying on it has changed.

“Schema” is the technical word for the expected shape of data: its field names, order, types, and sometimes which fields are required. Schema drift occurs when that shape changes without the receiving process being deliberately updated.

A new column is schema drift. So is a deleted column, a renamed field, or a whole-number field that begins containing entries such as 1,000 and Unknown.

Why a successful refresh is not enough

The obvious outcome is a failed import. A process expects account_id, receives accountId, and stops. That interruption is inconvenient, but at least it is visible.

The harder cases are quieter. Some systems allow flexible mappings, pass unfamiliar fields through, or treat changed values permissively so the job can finish. The dashboard refreshes on schedule. Nobody sees an error. Yet a join may now produce blanks, a calculation may exclude records, or a number may have become text before it reaches a report.

A completed workflow proves that the configured system accepted the delivery. It does not prove that the data still supports the same interpretation or decision.

This is why schema drift is better understood as an unannounced business-interface change, not merely a technical nuisance. One side changed what it sends; the other side may still be acting on an older expectation.

Separate flexible intake from trusted reporting

Not every structural change should trigger an alarm or a rejected file. A supplier might add an optional field called sales_rep_territory. Preserving that field in the received data is often sensible. It may be useful later, and there is little reason to discard it automatically.

But it should not silently rewrite the dataset that shared reports and calculations depend on.

A practical arrangement has two layers:

  • Received data: Keep the file or feed as it arrived, with enough context to identify the source and delivery date. This provides traceability and a place to inspect unexpected changes.
  • Approved data: Maintain a separate decision-facing table with explicit field names, mappings, and types. Changes enter this layer only after someone reviews their effect.

This approach is flexible where flexibility helps and strict where strictness matters. An incoming change can be retained and examined without automatically changing a revenue report, customer segmentation, regulatory submission, or automated action.

The same principle appears in formal schema-versioning systems, which evaluate whether a new schema remains compatible with existing users. The business translation is straightforward: a change is compatible only when current consumers can still interpret the data correctly, or have been deliberately updated.

Four questions for an unexpected change

When the shape of a delivery changes, a short review can prevent a long cleanup effort later.

1. What changed? Record the old and new field definition. Was a field added, removed, renamed, reordered, or changed from a number to text? 2. What depends on it? Identify reports, calculations, joins, exports, and people using the affected field. 3. Is it backward-compatible? Can existing uses continue to work and retain their meaning, or does the change alter results or create ambiguity? 4. Who approves the new mapping or meaning? A technical mapping may require a business owner to confirm that the replacement field means the same thing.

Consider employee_count. If a source begins sending 1,000 and Unknown instead of whole numbers, accepting the column as text may preserve the delivery. It does not make an average employee-count calculation trustworthy. Someone still needs to decide how commas are parsed and how Unknown is handled.

A rename deserves the same care. If account_id becomes accountId, the apparent fix may be easy. Still, confirm that it is genuinely the same identifier before changing a mapping. Similar names are not proof of equivalent meaning.

Structure and meaning are related, but different

Schema checks cannot catch every important change.

If a field named revenue remains numeric and retains its name, the schema may be unchanged. But the provider might have switched from annual revenue to trailing-twelve-month revenue. That is a meaning change, not necessarily schema drift.

The reverse is also true: an added descriptive field may change the schema while having no effect on existing reporting.

Treat structural checks as one part of data quality. They belong alongside checks for missing values, duplicate records, freshness, allowed values, and changes in business definitions.

Keep a small change record

This does not require an elaborate governance program. A modest schema-change record is often enough:

  • source and date first observed
  • old field definition and new field definition
  • affected reports, datasets, or automated actions
  • decision made and the person responsible
  • effective date of the approved change

That record creates a lightweight data contract. It gives future reviewers an answer when someone asks why a metric moved, when a field changed, or whether an old report can be compared with a newer one.

Upstream systems will change. A resilient data process does not pretend otherwise. It accepts incoming data cautiously, makes differences visible, and requires deliberate approval before changed data shapes the decisions people make.

Have a dataset that needs to become usable?

Morrow Creek Data Services handles paid research, cleanup, verification, and structured delivery projects.

Start a data project