Prerequisites
- An Admin role in Paradime, needed to change the workspace dbt™ version.
- Your project on dbt™ 1.11, upgraded via the 1.11 guide.
What can break
The biggest upgrade impact is the set of behavior flags that become enabled by default in 1.12. If you never set them explicitly, their behavior changes when you switch versions:
You can opt out of any of these by setting the flag to
false under flags: in dbt_project.yml, but note that the v2 engine removes that opt-out.
What’s new in dbt™ 1.12
Opt-in v2 parser
The--use-v2-parser flag delegates parsing to the new v2 Rust parser instead of the v1 Python parser. It is significantly faster, especially on larger projects where it can be 5–10× quicker, and it is the natural first step toward v2 compatibility: you can catch and fix project issues gradually rather than all at once. The flag changes no behavior unless explicitly set.
New Iceberg catalogs spec
The catalogs.yml spec was reworked to be simpler and current with ecosystem Iceberg support. The new spec can also power cross-platform dbt™ Mesh.
Native private packages
packages.yml and dependencies.yml support installing packages from private GitHub, GitLab, or Azure DevOps repositories with the private key, using your system’s SSH configuration for authentication instead of a token or full Git URL:
UDF extensions
- JavaScript UDFs on Snowflake and BigQuery: a
.jsfile infunctions/plus a YAML file with arguments and return type. - Overloaded UDFs via the
overloadsproperty, so one function name accepts different input types. Supported for SQL UDFs in Snowflake and Postgres, and Python UDFs in Snowflake. All overloads form one DAG node; on retry, only failed overloads rerun. - Public third-party PyPI packages for Python UDFs via the optional
packagesconfig; the warehouse installs them when creating the UDF. - Python UDFs on Databricks (requires Unity Catalog;
runtime_versionandentry_pointare ignored), in addition to Snowflake and BigQuery.
latest_version_pointer for versioned models
dbt™ can automatically create a pointer view named after a versioned model’s base name (for example dim_customers) once the latest version materializes, so you can query the current version without maintaining a view manually. Enable project-wide with the latest_version_pointer_enabled_by_default: true flag, per model with latest_version_pointer.enabled, and customize the name with latest_version_pointer.alias or the generate_latest_version_pointer_alias macro.
--sql flag for dbt run-operation
Execute ad hoc statements directly against your warehouse without defining a macro, for one-off operations like dropping a table, applying grants, or a data fix. The statement runs through the full Jinja compilation pipeline, so ref(), source(), var(), target, and other context variables are available.
on_error model config
Control whether downstream models run when an upstream model fails. Set on_error: continue on a model to let its downstream models still attempt to run; the default (skip_children) skips all downstream models on failure. --fail-fast takes precedence and stops at the first failure regardless.
Semantic layer updates
- Apache Ossie support: place Ossie-format
.jsonfiles in anosi/directory at the project root (configurable withosi-paths) and dbt™ parses them into the manifest alongside native semantic models. Ossie versions0.1.0and0.1.1are supported; other versions raise a parse error. dbt™ also writes anosi_document.jsonartifact totarget/at parse time. - New Semantic Layer YAML spec:
semantic_modelnests directly under each model instead of being a standalone top-level key, entities and dimensions are defined at the column level, measures are replaced bytype: simplemetrics within the model, andtype_paramsis deprecated in favor of top-level keys within each metric. See Migrate to the latest YAML spec.
selector method for named YAML selectors
Reference a named selector from selectors.yml inside --select or --exclude, for example --select selector:my_selector, and compose it with other selection methods and operators. Combining the legacy --selector flag with --select / --exclude still ignores the latter two and now also raises a warning.
vars.yml
Define project variables in a vars.yml file at the project root instead of dbt_project.yml. It is parsed before dbt_project.yml, so dbt_project.yml can reference those variables with {{ var('...') }}. You cannot define variables in both files.
Improved exception handling
Internal failures that previously surfaced as raw Python errors (AttributeError, KeyError, IndexError, RuntimeError) are replaced with clear dbt™ errors such as CompilationError and ParsingError. Highlights: dependency-graph cycles raise a CompilationError, run-operation failures include the exception message in run_results.json, and snapshot validation failures show the relevant message without the long Python traceback. Use --debug when you need the full Python output.
New behavior flags (disabled by default)
Introduced in 1.12, opt-in:Adapter-specific changes
- Snowflake:
snowflake.quote_argscontrols argument-name quoting on JavaScript UDFs;iceberg_version: 3opts Iceberg tables into V3 (immutable after creation, default2); theschedulerparameter on dynamic tables chooses between Snowflake-managed (ENABLE, requirestarget_lag) and dbt™-managed (DISABLE, dbt™‘s default) refreshes;snowflake_initialization_warehousesets a separate warehouse for a dynamic table’s initial build; thetransientconfig (and thesnowflake_default_transient_dynamic_tablesflag) creates dynamic tables without a Fail-safe period. - BigQuery: parallel microbatch execution is now supported;
bigquery_use_standard_sql_for_partitionsdefaults totrue(standard SQL viaINFORMATION_SCHEMA.PARTITIONS) ahead of BigQuery’s legacy SQL deprecation on June 1, 2026, and can be set tofalseto revert;bigquery_reject_wildcard_metadata_source_freshnessraises an error on metadata freshness checks against wildcard tables likeevents_*;job_link_info_level_log: truelogs job links at info level;job_execution_timeout_secondscan be set per model, snapshot, seed, or test. - Redshift:
redshift_skip_autocommit_transaction_statements: trueskips unnecessaryBEGIN/COMMIT/ROLLBACKstatements when autocommit is enabled (defaults tofalse); thequery_groupsession parameter tags queries for Workload Manager routing, configurable in the profile and overridable per model. - Databricks: the
row_filterconfig applies a Unity Catalog row filter totable,incremental,materialized_view, andstreaming_tablematerializations (not regular views or Hive Metastore relations);databricks_tagssupports key-only tags (''orNonevalues) and now merges additively across hierarchy levels, with lower-level values winning on conflicts.
Quick hits
- dbt™ surfaces occasional, non-blocking optimization hints, enabled by default; disable with the
hints_enabledflag. - Fusion-specific names in
warn_error_options(for exampleStaticAnalysis) are tolerated and ignored with a note, so configs can be shared across dbt Core™ and the v2 engine. - Macros invoked with
dbt run-operationcanref()models withprivateorprotectedaccess without aDbtReferenceError. dbt seed --emptycreates seed tables with the correct schema but no data.- Environment variables load automatically from a
.envfile in the working directory; shell variables take precedence, anddbt initadds.envto the default.gitignore. dbt compilewrites compiled SQL for snapshots totarget/compiled/, one output file per snapshot.
Upgrade steps
1
Audit the newly-default behavior flags
Check your project against the “What can break” table: un-nested cumulative metrics now error, failing
on-run-start hooks now skip everything, and macro argument validation is on. Fix the code, or explicitly set a flag to false in dbt_project.yml to defer (remembering v2 removes the opt-out).2
Test on 1.12 in a non-production environment
Pin a Bolt environment to dbt™ 1.12 in Settings > Environments or use a staging workspace, and run your schedules and a full
dbt build from the Code IDE terminal.3
Trial the v2 parser
Run
dbt parse --use-v2-parser in the Code IDE terminal and fix anything it reports. This is the lowest-risk way to start on v2 readiness.4
Switch the workspace version
In Settings > Workspace > General, select Change version, choose 1.12, and save. See Upgrade dbt Core™ version.
dbt --version reports 1.12.x, Bolt schedules run green, and dbt parse --use-v2-parser completes cleanly. The most likely failures come from the flipped behavior flags: cumulative metrics missing cumulative_type_params now error, and on-run-start hook failures now skip the whole run.Next steps
Prepare for dbt™ v2
What the v2 engine removes, and the readiness checklist.
Upgrade with the DinoAI agent
Automate the flag audit and fixes with an agent-driven PR.
Manage dbt™ version
The workspace setting and per-environment overrides.
Official v1.12 upgrade guide
The upstream dbt™ documentation this guide is based on.