Snowflake adapter behavior changes
The following are the current behavior change flags that are specific to dbt-snowflake:
| Flag | dbt-snowflake: Intro | dbt-snowflake: Maturity | Status |
|---|---|---|---|
snowflake_default_transient_dynamic_tables | 1.12.0 | TBD | Active |
snowflake_managed_iceberg_default | 1.12.0 | TBD | Active |
The snowflake_default_transient_dynamic_tables flag
Available starting dbt-snowflake v1.12. The snowflake_default_transient_dynamic_tables flag controls whether Snowflake dynamic tables are created as transient when the model config does not explicitly set the transient config.
- When set to
false(default): Dynamic tables are created as permanent tables with a Fail-safe period unless you settransient: truefor a specific model. - When set to
true: Dynamic tables are created as transient (no Fail-safe period) whentransientis not specified in the model config. Transient dynamic tables can reduce storage costs.
Set the snowflake_default_transient_dynamic_tables flag in your dbt_project.yml under the flags key. You can override the default setting using the transient config on dynamic table models.
The snowflake_managed_iceberg_default flag
In dbt v2, this behavior is the default and there's no flag to set. external_volume defaults to SNOWFLAKE_MANAGED, and dbt omits base_location whenever the table uses Snowflake-managed storage.
Available starting dbt-snowflake v1.12. The snowflake_managed_iceberg_default flag controls what dbt does when a model sets table_format: iceberg for an Iceberg table without an external_volume.
Snowflake rejects BASE_LOCATION for Iceberg tables that use Snowflake-managed storage and returns the error BASE_LOCATION property is not supported for Iceberg tables using Snowflake Managed Storage. This flag lets dbt generate data definition language (DDL) that Snowflake Horizon accepts without requiring you to configure a catalog.
- When set to
false(default): dbt doesn't emitexternal_volume. Snowflake falls back to any default external volume set at the account, database, or schema level, and dbt still generates abase_location. - When set to
true: dbt emitsexternal_volume = 'SNOWFLAKE_MANAGED'and omitsbase_location, so the table uses Snowflake-managed storage.
The flag defaults to false to avoid changing the target storage for projects that rely on a default external volume set at the account, database, or schema level.
Two cases don't depend on this flag:
- When you set
external_volumetoSNOWFLAKE_MANAGED, dbt always omitsbase_location. dbt resolvesexternal_volumefrom the model config first and then from the catalog definition incatalogs.yml, so setting it in either place omitsbase_location. - When you set
external_volumeto a user-defined volume, such as Amazon S3, Azure, or Google Cloud Storage, dbt always emits bothexternal_volumeandbase_location.
Set the flag in your dbt_project.yml under the flags key:
flags:
snowflake_managed_iceberg_default: true
Was this page helpful?
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.