Skip to content

v2.0.0-alpha.5

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 20 Jul 10:03

2.0.0-alpha.5

Released July 20, 2026

Features

  • Migrate Redshift catalog macros to SHOW TABLES and SVV_REDSHIFT_COLUMNS when datasharing is enabled, so catalog generation works for cross-database relation
  • Adds defer_job_id support via DBT_CLOUD_DEFER_JOB_ID env var. When set alongside defer_env_id, appends ?job_id= to the manifest download URL for job-specific deferral.
  • Add catalog_database support to v2 catalogs.yml: when set, catalog_database takes highest priority in generate_database_name over model database config and target.database. Uses the existing build_catalog_relation pattern — no new adapter method. Supported for Snowflake (all types), BigQuery (biglake_metastore), and Databricks (unity, optional, falls back to catalog_name).
  • Fire telemetry event on static analysis propagation completion
  • Add POST /api/v1/analytics/events relay endpoint (docs v2 → Vortex)
  • docs analytics: add distribution field and hydrate server-authoritative fields (distribution, dbt_version, is_logged_in, dbt Cloud IDs) on POST /api/v1/analytics/events

Fixes

  • Populate defer_relation on graph.nodes entries (models, snapshots, seeds) so node.defer_relation works in Jinja, matching dbt-core
  • Correct defer_relation wire shape on graph.nodes to match dbt-core's DeferRelation dataclass (drop unique_id, add description/compiled_code/meta/tags/config)
  • Prevent panic when calling insert() on a mutable list with an out-of-bounds index; return a proper template error instead. This was the primary panic causing cascading lock poisoned panics in minijinja's MutableVec.
  • Parse-time config.get(name) now matches dbt-core's ParseConfigObject.get (core/dbt/context/providers.py:554) by returning "" for every key except meta. The meta key keeps a permissive chainable stub (ParseConfigValue) so dbt-autofix's recommended config.get('meta').custom_key migration pattern (see dbt-autofix/manual_fixes/custom_configuration.md) keeps working during Fusion's static-analysis compile of materialization bodies. Separately, adapter.get_relation now coerces None/Undefined args to "" at the strict &str unwrap so the compile-phase CompileConfig.get('database')None path (mirroring Python's RuntimeConfigObject.get) flows through without crashing the prefetch-recording call. Together this unblocks the Anisi customer project (account 303 / project 3580) whose snowflake_external_table materialization in dbt_external_tables calls adapter.get_relation(database=config.get('database'), ...). Broader audit of where the same None-tolerance coercion belongs across other adapter methods is a follow-up dbt-core ↔ dbt-fusion parity investigation.
  • Add +resource_tags config support for seeds and snapshots in dbt_project.yml
  • stop using schema cache (prefetch at parse time) for adapter.get_columns_in_relation if it's using in a selected node without using strict static analysis.
  • Resolve event_time from seed and snapshot inputs for microbatch models (matches core v1)
  • dbt State view reuse during full-refresh runs
  • Generic test nodes with long names no longer have empty depends_on.macros in the manifest
  • Spark: fix schema existence and listing on the Hive metastore. check_schema_exists now resolves via show databases instead of the nonexistent information_schema.schemata (fixing snapshots and other guard-then-create paths), and list_schemas reads the show databases result column name-agnostically (namespace on OSS Spark, databaseName on Databricks). Databricks behavior is unchanged.
  • Implement symbolic linter
  • Replace panic with a user-facing error when an exposure depends_on entry does not resolve to a ref(), source(), or metric() call
  • Improve the Snowflake dbt State metadata error when database or schema is empty.
  • model.original_file_path now resolves to the correct path in Jinja macro context during parse phase instead of returning '.'.
  • persist_docs: warn about and skip columns documented in YAML that are not present in the database, instead of failing the model build or silently mis-applying column comments (ports dbt-labs/dbt-adapters#1690)
  • Stop /api/v1/health from leaking the absolute index_dir path; replace with project_loaded + generation (snapshot timestamp) and an X-Docs-Generation header
  • Reduce dbt State auth token request timeout to 15 seconds and retry transient auth service failures.
  • Add graceful shutdown/drain to dbt docs server so rollout restarts don't reset in-flight readers
  • Implement normalize() on pytz timezone objects so unit-test fixtures using modules.pytz.timezone(...).normalize(...) parse instead of failing with an opaque dbt1013 deserialization error
  • Treat an empty or zero-byte selectors.yml as no selector definitions, matching dbt Core behavior instead of raising SelectorError dbt1600
  • Analysis nodes now have compiled, compiled_code, and compiled_path populated in the manifest after dbt compile
  • state:modified no longer flags models whose persist_docs config is set as environment-aware Jinja.
  • Include YAML-supplied generic test config in manifest raw_code.
  • Restore the Snowflake warehouse using its canonical upper-cased name (matching dbt Core's current_warehouse()-based restore), so per-model snowflake_warehouse overrides no longer cause record/replay SQL mismatches
  • Snapshots no longer appear in their own depends_on.macros; fixed by skipping self-referential macro dep recording in the DAG listener
  • LSP fix deferral for show (preview CTE) and compile file (#14542)
  • Match Python re.sub behavior for empty regex matches in dbt Jinja modules.re.
  • Bump Snowflake Driver to 0.21.14 to fix Timestamp Freshness
  • BigQuery: treat 403 access-control failures (missing bigquery.datasets.create IAM permission or VPC Service Controls policy violations) as ignorable permission errors during schema creation, matching dbt-core; runs against centrally-provisioned datasets in governed/VPC-SC environments no longer fail on the eager CREATE SCHEMA step
  • BigQuery unit tests: fixture values that are SQL expressions for STRUCT or GEOGRAPHY columns (e.g. STRUCT(...), ST_GEOGPOINT(...)) are now injected verbatim instead of being single-quoted as string literals, so BigQuery can CAST them to the target type; matches dbt-core
  • Bump pyo3 workspace dependency from 0.27 to 0.29 to support Python 3.15 in CI runner images
  • Fix a client-cancellation panic in the Snowflake ADBC driver on long-running queries.
  • Resolve project flags case-insensitively in the Jinja flags context so a flag set in dbt_project.yml is reachable whether a macro reads it lower-case or upper-case, matching dbt Core
  • Fix show --inline broken when root package is disabled
  • Redshift POSIX regex-negation operators !~ and !~* no longer raise a false-positive dbt0101 SyntaxInvalid diagnostic (#15249)
  • Report cached dbt State data tests attached to unchanged views as no-change reuse.
  • Stop raising a false dbt1159 "Test cannot have the same key '' at the top-level and in config" when a data test has a top-level config key (e.g. where) and a config: block that does not set that key
  • state:modified no longer flags data tests whose schema.yml config uses environment-aware Jinja (where/severity/tags/meta), and now correctly detects genuine changes to a test's where/limit/severity: data tests join the wholesale unrendered_config comparison (dbt-core#15286).
  • Remove synthetic materialization macro call coordinates from runtime error locations.
  • Filter synthetic snapshot macro uids (snapshot..snapshot_) from depends_on.macros in snapshot nodes; these Fusion-internal uids never appear in manifest.macros and caused a dangling reference.
  • Fix unit tests on Redshift failing with an internal error (SQLSTATE XX000) when the tested model uses QUALIFY
  • state:modified no longer flags seeds or snapshots whose config uses environment-aware Jinja (e.g. persist_docs, quote_columns, grants, meta), and now correctly detects genuine changes to a snapshot's meta while no longer over-selecting snapshot group-only changes: seeds and snapshots join the wholesale unrendered_config comparison (dbt-core#15286).
  • Allow default generic tests to aggregate and render task-time aggregation SQL
  • Prevent dbt State metadata MapReduce from stalling behind a speculative connection attempt after worker results are ready.
  • Normalized back-slashes to forward-slashes for path, original_file_path and patch_path
  • state:modified — retire the per-key unrendered config grafts for models and sources
  • Support meta_get on Jinja map values that represent dbt node configs.
  • Support context-backed Jinja map caches that use get and update.
  • state:modified for data tests now follow dbt-core TestConfig key allowlist
  • Report an accurate, path-normalized error when a local: package cannot be resolved: distinguish a missing package directory ("Package directory not found") from a directory that lacks a dbt_project.yml, resolve .. segments in the reported path, and add dbt Core-style guidance
  • Tolerate a partially-migrated package-lock.yml that mixes the name/no-name entry forms: the deprecated lock parser now accepts (and ignores) a name key instead of failing the build with UnusedConfigKey (dbt1060) errors, matching dbt Core
  • Expose model.path relative to the resource root (e.g. staging/orders.sql) in both the config() block and the model body, matching dbt-core; previously it was empty inside config() and carried the models/ prefix in the body
  • Fix microbatch lookback off-by-one so a lookback of N produces N+1 batches (current batch plus N previous), matching dbt-core and the microbatch docs (#15477)
  • dbt retry now preserves --full-refresh from the original run, so incremental models retried after a failed full-refresh build use full-refresh (drop + recreate) semantics instead of incremental merge semantics
  • Hide the internal --write-metadata flag in favor of --write-index, fix 'dbt parse --write-index' to generate the index instead of failing with a save_artifact_meta IO error, and make the dbt-index warnings reference --write-index and respect warn_error_options
  • Reduce BigQuery dbt State freshness fanout by using schema-level metadata refreshes for non-override submit-time misses.
  • Quote grantees when revoking grants, so revoking a grant whose name contains special characters no longer fails with a syntax error.
  • Jinja parser now accepts keyword-argument names spelled like literal keywords (none, true, false), e.g. namespace(gold=0, unknown=0, none=0), matching dbt Core. Previously these raised MacroSyntaxInvalid (dbt1502): non-keyword arg after keyword arg.
  • Support non-ASCII Jinja macro names in Fusion parsing.
  • Ensure data tests submit zero freshness tolerance to dbt State.
  • Translate legacy BigQuery seed +column_types aliases (e.g. float, integer, text) to their canonical types (FLOAT64/INT64/STRING) instead of failing with 'Invalid column description', matching dbt Core
  • Allow dbt State submissions to include upstream dependencies whose last modified timestamp could not be resolved, instead of bypassing state for the model.
  • Bump BigQuery ADBC driver to 0.21.0.dev+dbt0.21.13, wiring HTTPS_PROXY/NO_PROXY support into the OAuth token-exchange transport

Under the Hood

  • Serialize config for macros for manifest parity with core
  • remove unused calculate_freshness_from_metadata_batch method
  • Add live Snowflake ADBC client cancellation regression test
  • Generic and column data tests now include their schema.yml config (where, severity, limit, tags, meta, ...) in unrendered_config, matching models/seeds/snapshots. Preparatory for correct state:modified comparison of data tests.
  • Add ClickHouse to the list of non experimental adapters.
  • Publish pre-release versions to Homebrew and winget during the pre-stable window, and fix the empty-version bug in the release-v2 publish jobs.
  • Add clickhouse-0.1.0 ADBC driver to CDN checksums

Security

  • Remove unused ad-hoc SQL query endpoints (POST /api/v1/query, GET /api/v1/tables) from dbt docs server

Contributors