Skip to content

How Databricks Handles CDC Replay Safety ​

May 2026

Databricks replay safety comes from Delta transaction rules plus an explicit ordering contract for each business key.

Short Answer ​

Databricks handles CDC replay safety by applying changes through Unity Catalog MERGE on Delta tables and only updating a matched row when the incoming _skippr_order_token is newer than the stored token. That keeps an older replay from overwriting more recent state.

Delete replay safety follows the same logic. Skippr records delete intent in a tombstone table and uses that newer-or-older comparison to prevent a stale insert from bringing back a row that was deleted later in source order.

Why Teams Struggle with This ​

This matters in lakehouse pipelines because retries often happen far from the SQL layer. A file upload can be retried, a compute job can restart, or a batch can be reprocessed. Delta ACID transactions help, but they still need a row-ordering rule to decide which mutation should win.

  • A successful transaction is not the same as the correct final row winning.
  • Replayed updates are harmless only when the merge condition compares row freshness.
  • Delete safety depends on preserving delete intent, not only on removing a row once.
  • Teams need business keys because reconciliation is defined per logical entity.

How Skippr Handles It ​

Skippr treats Databricks replay safety as part of the destination contract, not as a downstream repair task. CDC-managed Delta tables get the _skippr_order_token column and the companion tombstone tables automatically, so the warehouse rules stay inspectable.

A concrete example: customer_id = 7 is updated from plan = basic to plan = pro, then an earlier replay of plan = starter arrives from a retry. The MERGE guard compares order tokens and keeps plan = pro, which is the state an analyst expects to see in the final-state table.

  • Databricks CDC uses Unity Catalog MERGE on Delta tables.
  • Delta Lake ACID transactions support exactly-once final-state application in Skippr.
  • Tombstone tables stop older inserts from resurrecting newer deletes.
  • The same warehouse contract can feed directly into generated dbt models.

What the First Useful Version Looks Like ​

Databricks replay safety works best when you think about rows, not files. The file transport can retry as much as it needs to as long as the row-ordering rule is enforced at apply time.

That is the useful reason to care about _skippr_order_token rather than treating it as extra metadata.