【dbt】dbt ~ target ~

◾️はじめに

dbt の target について取り扱う

目次

【1】target
 1)Common
 2)Snowflake
 3)Postgres/Redshift
【2】profiles.yml との関係
 1)サンプル
【3】サンプル
 例1:config.enabled + target.type でDBごとで切り替える

【1】target

* ウェアハウスへの接続した時の情報
 => 個人的な理解では、各環境(e.g. dev/stage/prod etc)ごとの
  情報を保持しているオブジェクトってイメージ

https://docs.getdbt.com/reference/dbt-jinja-functions/target

1)Common

Variable Example Description
target.profile_name demo_profile アクティブのprofile名
target.name dev アクティブのtarget名
target.schema dbt_alice スキーマ
target.type postgres 使用しているDB "postgres", "snowflake", "bigquery", "redshift", "databricks"
target.threads 4 dbtが使用しているスレッド数

2)Snowflake

Variable Example Description
target.database RAW アクティブのデータベース名
target.warehouse TRANSFORM warehouse名
target.user TRANSFORM_USER アクティブのユーザ名
target.role TRANSFORM_ROLE アクティブのロール名
target.account abc123 アクティブのアカウント名

3)Postgres/Redshift

* 勉強して気がついたが、データベース名が異なるので注意
 Snowflake「target.database」 <=> Postgres/Redshift「target.dbname」

https://docs.getdbt.com/reference/dbt-jinja-functions/target#postgresredshift

Variable Example Description
target.dbname analytics アクティブのデータベース名
target.host abc123.us-west-2.redshift.amazonaws.com アクティブのホスト名
target.user dbt_user アクティブのユーザ名
target.port 5439 アクティブのポート

【2】profiles.yml との関係

* target は、profiles.yml 内で管理している
* profiles.yml (1) : target (多)の関係

https://docs.getdbt.com/reference/dbt-jinja-functions/profiles-yml-context

1)サンプル

demo_profile: # profile の名前
  target: dev # デフォルトで使う target の名前
  outputs:
    dev: # target の名前
      type: snowflake # 接続先のデータウェアハウスの種類
      project: demo_project # 使用するプロジェクト
      warehouse: demo_warehouse # 使用するウェアハウス
      database: demo_db # 使用するDB
      schema: demo_schema # 使用するスキーマ
      threads: 8 # dbt のスレッド数
    prod:
      type: ...

Snowflake
https://docs.getdbt.com/docs/core/connect-data-platform/snowflake-setup
PostgreSQL
https://docs.getdbt.com/docs/core/connect-data-platform/postgres-setup

2)変数 var / env_var の併用

* 変数 var / env_var を使用することができる

https://docs.getdbt.com/reference/dbt-jinja-functions/profiles-yml-context

より抜粋

Available context methods:

* env_var
* var (Note: only variables defined with --vars are available)

Example usage

jaffle_shop:
  target: dev
  outputs:
    dev:
      type: redshift
      host: "{{ env_var('DBT_HOST') }}"
      user: "{{ env_var('DBT_USER') }}"
      password: "{{ env_var('DBT_PASS') }}"
      port: 5439

【3】サンプル

例1:config.enabled + target.type でDBごとで切り替える

dbt seed 実行後、エラー「Cross-db references not allowed in postgres」が発生
https://dk521123.hatenablog.com/entry/2025/05/23/215144

-- models/snowflake_only_model.sql
{{
  config(
    database="another_db",
    enabled=(target.type == 'snowflake')
  )
}}
select ...

参考文献

https://numb86-tech.hatenablog.com/entry/2024/08/16/175300

関連記事

dbt ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2023/06/30/000000
dbt ~ 環境設定編 ~
https://dk521123.hatenablog.com/entry/2023/12/16/152147
dbt ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/05/30/151003
dbt ~ DB/Schema/Table の指定方法 ~
https://dk521123.hatenablog.com/entry/2024/09/29/185918
dbt ~ 変数 var / env_var ~
https://dk521123.hatenablog.com/entry/2025/05/03/140109
dbt ~ config ~
https://dk521123.hatenablog.com/entry/2025/05/11/024449
dbt CLI ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2024/07/21/234811
dbt seed 実行後、エラー「Cross-db references not allowed in postgres」が発生
https://dk521123.hatenablog.com/entry/2025/05/23/215144