Skip to content

How BigQuery Handles CDC Replay Safety ​

May 2026

BigQuery replay safety comes from guarded MERGE behavior, not from hoping retries never happen.

Short Answer ​

BigQuery handles CDC replay safety by applying changes with atomic MERGE DML and comparing the incoming _skippr_order_token to the token already stored on the row. If an older mutation is replayed after a newer one, the older write loses and the final-state row stays correct.

Deletes are protected the same way. Skippr writes the delete intent into a companion tombstone table and only allows a later insert for that business key if its order token is newer than the delete. That is what stops a replayed old insert from bringing a deleted row back.

Why Teams Struggle with This ​

This matters because retries are normal in warehouse pipelines. A load can be retried after a network hiccup, a job can be restarted after partial progress, or a backfill can overlap with data that already landed. Without an ordering rule inside BigQuery, the warehouse can accept stale state even when the transport layer behaved correctly.

  • A replayed update should not overwrite a newer row just because it arrived later.
  • A replayed insert should not resurrect a key that was already deleted more recently.
  • A business key is required because reconciliation happens per logical row, not per batch file.
  • Atomic MERGE behavior matters because the table being queried is the thing analysts will trust.

How Skippr Handles It ​

Skippr makes BigQuery replay safety concrete instead of implied. CDC-managed tables get a STRING _skippr_order_token column automatically, and deletes are tracked in skippr_tombstones so replay handling stays visible in the destination design.

That gives teams a clearer review surface. A concrete example: if order 42 is updated to status = shipped and an older status = packed event is replayed later, the BigQuery MERGE guard keeps shipped as the winner because the newer order token is already on the row.

  • BigQuery uses MERGE DML with order-token comparison in the matched branch.
  • The destination creates tombstone tables automatically for delete safety.
  • BigQuery MERGE is documented as atomic and consistent for final-state application in Skippr.
  • The warehouse contract stays close to the generated dbt starting point.

What the First Useful Version Looks Like ​

BigQuery replay safety is really a warehouse-state rule: newer wins, older loses, deleted keys stay deleted unless a newer insert arrives.

If that rule is clear, retries become an operational detail instead of a data-trust problem.