Prerequisites
- An Admin role in Paradime, needed to change the workspace dbt™ version.
- Your project currently on dbt™ 1.8. Upgrade one minor version at a time.
What can break
dbt Labs maintains backward compatibility across all 1.x versions, and behavior changes ship behind behavior change flags so existing projects get a migration window. Two things still deserve a check before you switch:What’s new in dbt™ 1.9
Microbatch incremental strategy
The new microbatch strategy processes large event datasets in discrete time-based batches, each with its own query, instead of one query for all new data:- Write your model query for a single batch; dbt™ generates the time filters from your
event_time,lookback, andbatch_sizeconfigurations. - Batches run independently, so failures are isolated and
dbt retryreloads only the failed batches. - Reprocess specific windows with the
--event-time-startand--event-time-endCLI arguments. - Batches that can run in parallel do so automatically, with a manual override via the
concurrent_batchesconfig.
If you use a custom microbatch macro, set the
require_batched_execution_for_custom_microbatch_strategy behavior flag to true in dbt_project.yml to enable batched execution. Without a custom macro, no flag is needed.Snapshot improvements
Snapshots become easier to configure, run, and customize:- Snapshots can now be defined in YAML files, a cleaner and more consistent specification.
snapshot_meta_column_namescustomizes the names of the meta fields dbt™ adds (dbt_valid_from,dbt_valid_to, and so on).target_schemais now optional; when omitted, snapshots use the schema of the current environment.- Standard
schemaanddatabaseconfigs are supported, consistent with other resource types. - dbt™ warns when the configured
updated_atfield is not the proper data type or timestamp. dbt_valid_to_currentsets a custom indicator (such as a future date) fordbt_valid_toon current records, instead of the defaultNULL.hard_deletescontrols how deleted source rows are handled:ignore(default),invalidate(replaces the legacyinvalidate_hard_deletes=true), ornew_record, which tracks hard deletes by adding a new record.
Properties moved to configs (backported)
Three properties became configs in dbt™ 1.10 and were backported to 1.9:freshness for sources, and meta and tags under columns. You can start moving them under config: now; the 1.10 guide covers the full list.
state:modified improvements
Environment-aware improvements reduce false positives and negatives in state:modified selection, for example when a model is materialized as a table in prod but a view in dev. The improvement is unlocked by the state_modified_compare_more_unrendered_values behavior flag below.
New behavior flags
dbt™ 1.9 introduces these flags, all disabled by default. Opt in by setting them totrue under flags: in dbt_project.yml:
Adapter-specific changes
- Redshift: supports IAM Role authentication.
- Snowflake: Iceberg table format support on the table, incremental, and dynamic table materializations, plus the
target.accountchange flagged above. - BigQuery: running queries can be cancelled on keyboard interrupt, and intermediate tables created by incremental models are auto-dropped to save resources.
- Spark: the ODBC driver connection string can be overridden for custom connections.
Quick hits
- Removing a contracted model (deleting, renaming, or disabling it) now raises an error for versioned models and a warning for unversioned ones.
- Data tests can be documented with
description. refandsourcework in foreign key constraints.dbt testaccepts--resource-type/--exclude-resource-typeto include or exclude data tests (test) or unit tests (unit_test).- The
enabledconfig is available on unit tests, defaulting totrue.
Upgrade steps
1
Prepare the project
Check the two Snowflake warnings above, review the behavior flags you want to opt into, and if you plan to adopt the YAML snapshot format, follow the snapshot migration reference. Commit any
dbt_project.yml flag changes before switching versions.2
Test on 1.9 in a non-production environment
Pin a Bolt environment to dbt™ 1.9 in Settings > Environments (leave production on Inherit workspace default) and run your main schedules against it, or switch the workspace version in a staging workspace first. See Create and manage environments.
3
Switch the workspace version
In Settings > Workspace > General, select Change version, choose 1.9, and save. Every user’s Code IDE and every Bolt schedule that inherits the workspace default now runs 1.9. See Upgrade dbt Core™ version.
4
Rebuild state for deferred runs
If you enable
state_modified_compare_more_unrendered_values, regenerate the manifests your deferred and Turbo CI runs compare against by running the production schedule once on 1.9 before relying on state:modified selection.dbt --version in the Code IDE terminal reports 1.9.x, dbt parse and dbt build complete without new errors, and your Bolt schedules run green. The most likely failure is Snowflake code that depended on target.account containing underscores; search your project for target.account if compiled identifiers look wrong.Next steps
Upgrade to dbt™ 1.10
The next version introduces the deprecation warnings that pave the road to v2.
Upgrade with the DinoAI agent
Have an agent apply the project changes and validate the build for you.
Manage dbt™ version
The workspace setting and per-environment overrides.
Official v1.9 upgrade guide
The upstream dbt™ documentation this guide is based on.