Skip to main content

target_database

dbt_project.yml
snapshots:
<resource-path>:
+target_database: string

snapshots/<filename>.sql
{{ config(
target_database="string"
) }}

Description

The database that dbt should build a snapshot table into.

Notes:

  • The specified database must already exist
  • On BigQuery, this is analogous to a project.
  • On Redshift, cross-database queries are not possible. If you use this parameter, you will receive the following error. As such, do not use this parameter on Redshift:
Encountered an error:
Runtime Error
Cross-db references not allowed in redshift (raw vs analytics)

Default

By default, dbt will use the target database associated with your profile/connection.

Examples

Build all snapshots in a database named snapshots

dbt_project.yml
snapshots:
+target_database: snapshots

Use a target-aware database

Use the {{ target }} variable to change which database a snapshot table is built in.

Note: consider whether this use-case is right for you, as downstream refs will select from the dev version of a snapshot, which can make it hard to validate models that depend on snapshots.

dbt_project.yml
snapshots:
+target_database: "{% if target.name == 'dev' %}dev{% else %}{{ target.database }}{% endif %}"

Use the same database-naming behavior as models

Leverage the generate_database_name macro to build snapshots in databases that follow the same naming behavior as your models.

Notes:

  • This macro is not available when configuring from the dbt_project.yml file, so must be configured in a snapshot config block.
  • Consider whether this use-case is right for you, as downstream refs will select from the dev version of a snapshot, which can make it hard to validate models that depend on snapshots.
snapshots/orders_snaphot.sql
{{
config(
target_database=generate_database_name('snapshots')
)
}}
0