dbt_project.yml 是 dbt 執行時最重要的設定檔,他讓 dbt 知道這個資料夾下是 dbt project
它定義了 dbt 資料夾 & model 結構,統一 database, dataset, table 名稱及型式(table, view)設定,且不論是 dbt run, dbt test 等指令和 flag(tag, var…)都有對應設定寫在 dbt_project.yml
name: "migo-dbt"
version: "1.3.0"
# dbt會檢查當前目錄的profiles.yml文件,以搜尋同名稱的文件
profile: "migo-dbt"
例如以下 profiles 文件中,dbt 會用”jaffle_shop” 的內容為 db 連線資訊
# example profiles.yml file
migo-dbt:
target: dev
outputs:
dev:
type: postgres
host: localhost
user: alice
password: <password>
port: 5432
dbname: jaffle_shop
schema: dbt_alice
threads: 4
model-paths: ["models"]
analysis-paths: ["analyses"]
test-paths: ["tests"]
seed-paths: ["seeds"]
macro-paths: ["macros"]
snapshot-paths: ["snapshots"]
docs-paths: ["docs"]
target-path: "target"
name: migo-dbt
models:
# 讓 models 下使用上面提到的 project 名字,使 event 資料夾下都是跑 migo-dbt project
migo-dbt:
# 資料夾結構為 models/events/ , events 下為 models sql 檔
events:
# 設定 tags,跑 dbt 指令和 lineage 圖可以當作篩選標籤
+tags: migo
# 設定此資料夾下的 dbt run 要形成實體 table 或是 view
+materialized: table
# 若使用 bigquery,設定 event 的 model 都在 "migo-2209" project 執行
# 其他 database 設定
+database: migo-2209
# 資料夾結構為 models/events/base
# base 下設定 view 會蓋掉上層設定的 events table
base:
+materialized: view
# 若使用 bigquery,設定 base 的 model 都在 "migo-2209.datamart" dataset 執行
+schema: datamart
...
tests:
migo-dbt:
events:
+tags: test
# 以下只與 store_failures(註1) 相關
+database: migo-1806
+schema: event_custom_test
vars:
my_date: '2023-08-20'
以上所有部分寫在一起就是完整的 dbt_project.yml 囉!
註1: store_failures 為 dbt 保存 test 結果的功能,之後會介紹