github dbt-labs/dbt v2.0.0-dev.44-test-pypi

pre-releaseone hour ago

2.0.0-dev.44

Released November 11, 2026

Features

  • [Lake Compute] Read AWS Databricks Unity Catalog tables using Databricks profile PAT/OAuth M2M credentials, declaration-aware validation, and dbt debug attach parity. Existing fs catalogs.yml entries continue to use type: unity. Existing local Unity attach options in config.lakecompute must move to config.duckdb; Lake Compute access is read-only and Unity model writes are unsupported.
  • [ClickHouse] Adds cluster support and distributed_table / distributed_incremental materializations. (#14580)
  • Accept Databricks use_materialization_v2 as a model config so a project or individual model can choose its materialization path
  • [ClickHouse] Adds support for grants and dbt clone (#14652, #14585)
  • [ClickHouse] Accept the ClickHouse table options on snapshots and tests, engine, order_by and disable_on_cluster on seeds, and settings on unit tests, in dbt_project.yml and node config.
  • [Lake Compute] Lake Compute models can now ref() Databricks table and incremental models stored as managed Delta, without setting catalog_name
  • Accept Databricks merge_actions_explicit config to supply the full WHEN … THEN block of a merge incremental model as raw SQL (#16835)

Fixes

  • Fixes array_construct bug for Databricks with new adapter-specific macro. (#15893)
  • Preserve BigQuery relation column types when rendering unit test fixtures. (#15961)
  • Support Iceberg snapshots by preserving table format metadata and Snowflake-compatible timestamp precision (#15776)
  • BigQuery: make the priority profile setting a schema enum instead of a string (#16021)
  • Honor Snowflake catalog-linked database identifier case sensitivity during static analysis. (#16389)
  • ClickHouse: list relations per schema so get_relation is served from the relation cache instead of one catalog query per relation (#16427)
  • BigQuery seeds now load correctly when dbt runs outside the project root by resolving data files from each seed's package root. (#16127)
  • Indexing a modules.re match object (m[1], m['name']) returns the group instead of an empty string, matching dbt-core (#16451)
  • run_results.json reports why a data test failed or warned ("Got 2 results, configured to fail if != 0") instead of just Error or Warn, matching dbt-core (#16408)
  • Databricks: avoid synchronous OPTIMIZE when only automatic liquid clustering is configured. (#16539)
  • Exclude connection-limit wait time from the execution time reported in run results (#15724)
  • Accept --resource-type all and --resource-type default on v2 commands (#16589)
  • Name unnamed Databricks primary and foreign keys deterministically so safer replace and incremental runs keep stable key names (#16603)
  • Lowercase Databricks catalog, schema, and table names in information_schema constraint and column mask lookups so mixed-case schemas find existing constraints (#16611)
  • Stop dropping and re-adding unchanged Databricks primary and foreign keys on incremental runs by comparing keys on name and columns (#16612)
  • Emit Databricks constraint ALTER statements in a stable sorted order on incremental runs, matching dbt-databricks (#16617)
  • Scope the Databricks foreign-key metadata lookup joins to the constraint's catalog and schema so a same-named constraint elsewhere in the catalog no longer makes incremental runs drop and re-add the foreign key (#16737)
  • dbt retry reports 'Nothing to do' and exits 0 when the previous run has no retryable nodes, matching dbt-core
  • Databricks snapshots now accept zorder and skip_optimize from every config source, including dbt_project.yml, so the post-snapshot OPTIMIZE honors them as in dbt-databricks (#16699)
  • Replace a Databricks Hive metastore table with a view without renaming the table, which fails for managed Delta tables on S3. (#16760)
  • [ClickHouse] persist_docs descriptions containing ';' reach the server intact: ClickHouse SQL is split by a ClickHouse-aware scanner ($tag$ heredocs, backslash escapes, comments) instead of the Databricks lexer (#14585)
  • [ClickHouse] Replacing a view falls back to drop + create on servers without atomic EXCHANGE support (filesystems without renameat2); existing dictionaries are typed as dictionary relations
  • dbt retry after a parse-time failure no longer retries nodes outside the original --select
  • Recognize Databricks type names such as string, int, tinyint and decimal(p,s) in the Column is_string, is_number, is_integer, is_float and is_numeric checks, and never widen Databricks string columns during snapshot column expansion (#16791)
  • Add support for Databricks GEOGRAPHY and GEOMETRY metadata (#14601)
  • Databricks views updated with view_update_via_alter now enforce model contracts and reject column masks and row filters on ALTER and no-op runs, and keep column comments after ALTER VIEW AS changes the query (#16882)
  • Add zone attribute to pytz timezone objects so modules.pytz.utc.zone and modules.pytz.timezone(...).zone return the timezone name (#16970)
  • Implement modules.pytz.all_timezones and modules.pytz.all_timezones_set (#16966)
  • Ensure column-level foreign_key constraints on versioned models create DAG dependencies (#17023)

Under the Hood

  • Add PyPI banner for dbt-oss mirroring the existing dbt-core banner, without the dbt-core namespace deprecation notice
  • Run Databricks seeds through a single materialization path regardless of use_materialization_v2, matching dbt-databricks. (#16523)
  • Drop the no-op create_indexes and adapter.commit() calls from the Databricks snapshot materialization, matching dbt-databricks. (#16532)

Contributors

Don't miss a new dbt release

NewReleases is sending notifications on new releases.