Skip to main content

Snapshot configurations

Related documentation#

Available configurations#

Snapshot-specific configurations#

dbt_project.yml
snapshots:  <resource-path>:    +target_schema: <string>    +target_database: <string>    +unique_key: <column_name_or_expression>    +strategy: timestamp | check    +updated_at: <column_name>    +check_cols: [<column_name>] | all

General configurations#

dbt_project.yml
snapshots:  <resource-path>:    +enabled: true | false    +tags: <string> | [<string>]    +pre-hook: <sql-statement> | [<sql-statement>]    +post-hook: <sql-statement> | [<sql-statement>]    +persist_docs: {<dict>}

Configuring snapshots#

Snapshots can be configured in one of three ways:

  1. Using a config block within a snapshot
  2. Using a config resource property in a .yml file
  3. From the dbt_project.yml file, under the snapshots: key. To apply a configuration to a snapshot, or directory of snapshots, define the resource path as nested dictionary keys.

Snapshot configurations are applied hierarchically in the order above.

Examples#

Apply the target_schema configuration to all snapshots#

To apply a configuration to all snapshots, including those in any installed packages, nest the configuration directly under the snapshots key:

dbt_project.yml

snapshots:  +target_schema: snapshots

Apply the target_schema configuration to all snapshots in your project#

To apply a configuration to all snapshots in your project only (i.e. excluding any snapshots in installed packages), provide your project name as part of the resource path.

For a project named jaffle_shop:

dbt_project.yml

snapshots:  jaffle_shop:    +target_schema: snapshot_data

Similarly, you can use the name of an installed package to configure snapshots in that package.

Apply configurations to one snapshot only#

We recommend using config blocks if you need to apply a configuration to one snapshot only.

snapshots/postgres_app/orders_snapshot.sql
{% snapshot orders_snapshot %}    {{        config(          unique_key='id',          strategy='timestamp',          updated_at='updated_at'        )    }}    -- Pro-Tip: Use sources in snapshots!    select * from {{ source('jaffle_shop', 'orders') }}{% endsnapshot %}

You can also use the full resource path (including the project name, and subdirectories) to configure an individual snapshot from your dbt_project.yml file.

For a project named jaffle_shop, with a snapshot file within the snapshots/postgres_app/ directory, where the snapshot is named orders_snapshot (as above), this would look like:

dbt_project.yml
snapshots:  jaffle_shop:    postgres_app:      orders_snapshot:        +unique_key: id        +strategy: timestamp        +updated_at: updated_at

You can also define some common configs in a snapshot's config block. We don't recommend this for a snapshot's required configuration, however.

dbt_project.yml
version: 2
snapshots:  - name: orders_snapshot:    config:      persist_docs:        relation: true        columns: true