iT邦幫忙

2023 iThome 鐵人賽

DAY 4
1

dbt_project.yml 是什麼?

dbt_project.yml 是 dbt 執行時最重要的設定檔,他讓 dbt 知道這個資料夾下是 dbt project

主要目的

它定義了 dbt 資料夾 & model 結構,統一 database, dataset, table 名稱及型式(table, view)設定,且不論是 dbt run, dbt test 等指令和 flag(tag, var…)都有對應設定寫在 dbt_project.yml

dbt_project.yml 文件包含以下功能:

  • 定義 project 名稱、dbt 版本
name: "migo-dbt"
version: "1.3.0"
  • 指定用於連接到 database 的連線資訊名, dbt 會在 profiles.yml 中找到對應名
# 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 和各資源的位置
model-paths: ["models"]
analysis-paths: ["analyses"]
test-paths: ["tests"]
seed-paths: ["seeds"]
macro-paths: ["macros"]
snapshot-paths: ["snapshots"]
docs-paths: ["docs"]
target-path: "target"
  • 定義資料夾 model 結構
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

      ...
  • 定義 test
tests:
  migo-dbt:
    events:
      +tags: test
			# 以下只與 store_failures(註1) 相關
      +database: migo-1806
      +schema: event_custom_test
  • 定義變數: 可以把 model 有設定變數的預設值寫在 dbt_project.yml,—var 參數介紹
vars:
  my_date: '2023-08-20'

以上所有部分寫在一起就是完整的 dbt_project.yml 囉!

註1: store_failures 為 dbt 保存 test 結果的功能,之後會介紹


上一篇
dbt 核心功能指令有哪些? 要怎麼使用?
下一篇
dbt 各種設定是什麼? 要寫在哪? 怎麼寫?
系列文
如何借助 dbt 優化當代資料倉儲及資料工程師的水肥之路分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言