◾️はじめに
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