How Snowflake Handles CDC Replay Safety
May 2026
Snowflake replay safety is about making newer state win inside MERGE, not about hoping retries arrive in a friendly order.
Short Answer
Snowflake handles CDC replay safety by applying changes with MERGE DML and only updating a matched row when the incoming _skippr_order_token is greater than the token already stored on that row. That prevents an older replayed mutation from replacing newer state.
Delete safety is handled with tombstone recording plus row deletion in the destination flow. A later replay of an old insert for the same business key will not revive the row unless its order token proves it is actually newer than the delete that was already applied.
Why Teams Struggle with This
This matters because retries are expected in real pipelines. A network interruption, a restarted runner, or a replayed committed batch should not change what the final table means. Snowflake replay safety is valuable precisely because the warehouse table is what reporting and dbt models will depend on.
- A row that was correct yesterday should stay correct after a rerun today.
- Out-of-order delivery must not let an older update beat a newer one.
- Delete protection must be explicit or replayed inserts can create confusing resurrections.
- The business key determines where the conflict is resolved.
How Skippr Handles It
Skippr makes the Snowflake rules visible by creating the _skippr_order_token column and the skippr_tombstones companion automatically for CDC-managed tables. Snowflake then applies CDC changes through MERGE rather than leaving downstream models to clean up replay noise.
A concrete example: invoice_id = 9001 is updated from amount = 110 to amount = 125, and then the older amount = 110 event is replayed from an earlier batch. The guarded MERGE keeps amount = 125 because that row already carries the newer order token.
- Snowflake CDC uses MERGE DML for upserts and delete application.
- Order-token comparison blocks stale updates from winning.
- Tombstone tables stop older inserts from reviving deleted keys.
- The destination supports exactly-once final-state semantics in Skippr.
What the First Useful Version Looks Like
Snowflake replay safety is easy to summarize: the destination must preserve source order at the row level even when job execution order gets messy.
Once that is true, reruns feel operational instead of scary.
