CDC data-change assessments
Last updated 6 September 2026
Separate from pull-request SQL comparison
CDC assessments watch Snowflake Streams for source-row changes. They are not PR SQL diffs. Do not add CDC consume/prove to the pull-request workflow. Do not run dbt build before CDC proof: the current materialized mart is the before-state baseline.
Frontier is not currently autonomous self-healing. frontier cdc prove is assessment-only unless you pass --apply, which writes the repair to the target mart. Scheduling is optional and only needed for continuous operation. The reference workflow uses workflow_dispatch; the cron schedule stays commented.
Supported CDC lifecycle
- Configure
frontier-cdc.ymlwith providersnowflake_stream(no credentials in that file). frontier cdc inspectprints configured streams without consuming them.frontier cdc statusreportspendingoremptyper stream.frontier cdc consumedurably captures a batch. Empty streams print statusEMPTY. Repeat consume of the same captured batch is idempotent (REUSED).- DELETE/INSERT update pairs normalize into one logical update.
- Semantic routes convert source keys into affected entity keys.
frontier cdc provetargeted-recomputes candidates and checks whether mart output changed. Consuming a stream is not the same as completing validation.frontier cdc uploadsends aggregates for a completed batch without re-running proof.
pip install "frontier-runner[snowflake]==0.1.1"
frontier cdc inspect
frontier cdc status
frontier cdc consume
frontier cdc prove
frontier cdc uploadPrerequisites
- Least-privilege CDC grants from
frontier setup snowflake --cdc. Never include real credentials or customer identifiers. - An active semantic manifest, fetched or pinned locally.
- Current dbt artifacts for
cdc prove(target/manifest.json). - Optional
--batch-idto select a captured or failed batch. Default prove uses the oldestCAPTUREDorFAILEDbatch.
BASELINE_STALE means a previous completed CDC assessment was not applied or incorporated into the mart baseline. Resolve that before treating a new passed upload as current. See Troubleshooting.