Snowplow Unified DBT Incremental Manifest Reset on Excluded Model Runs

Edwin Mejias  
Edited

Summary

Customers using Snowplow’s Unified DBT package may encounter an issue where the snowplow_unified_incremental_manifest table is unexpectedly reset during runs that should have excluded incremental models.

This article documents a known compatibility issue between DBT Core and the Snowplow Unified model setup that can result in manifest corruption, leading to partial or missing data in downstream derived tables.

Affected Products

  • DBT Core ≥ 1.7.0
  • Snowplow Unified DBT Model
  • Snowplow Utils v0.17.2

Symptoms

  • models_matched_from_manifest evaluates to zero despite valid models being selected.
  • snowplow_unified_incremental_manifest table is unexpectedly recreated.
  • Incremental logic is skipped, resulting in missing or overwritten data.
  • This occurs even when using the --exclude tag:snowplow_unified_incremental flag.
  • snowplow__allow_refresh: false setting is not respected in certain conditions.

Root Cause

This issue stems from a DBT Core bug (dbt-labs/dbt-core#9789), where partial parsing creates an outdated or inaccurate model manifest. As a result, dbt does not recognize that some models were previously run or tagged correctly, leading to an incorrect value for models_matched_from_manifest.

This caused macros such as get_run_limits.sql in the snowplow-utils package to interpret the manifest as empty, thereby triggering a rebuild of the snowplow_unified_incremental_manifest table — even when it shouldn't.

Workaround / Resolution

To prevent the issue, disable partial parsing during your dbt runs:

dbt run --no-partial-parse

This ensures dbt fully rebuilds its internal model manifest and correctly detects model tags and dependencies.

Additional Best Practices

  • Always pin both your snowplow_utils and dbt versions explicitly in your packages.yml and deployment environment.
  • Monitor the size of the snowplow_unified_incremental_manifest table to detect resets or empty states.
  • Add logging to capture values such as models_in_run and models_matched_from_manifest during test runs.
  • Consider disabling --partial-parse in production pipelines when making structural changes or upgrades to dbt packages.

Support Scope

Note that Snowplow does not maintain the dbt-core framework and cannot guarantee fixes for upstream bugs. All assistance provided in this area is on a best-effort basis.

For persistent dbt issues outside of Snowplow models, we recommend contacting dbt Support directly.