iT邦幫忙

2023 iThome 鐵人賽

DAY 22
0

昨日 DAY 21 所討論的專案架構,可能也和我們日常更新的排程規劃有關。


依資料來源系統更新

DAY 12 時有提過,我們在執行 dbt run 或是 dbt build 的時候,可以用 --select 參數,選擇只跑單一 model,或是加跑他的上游/下游/上下游。

除了針對單一 model,我們也可以一次跑一整個資料夾底下的 model,以及加跑上游/下游/上下游,例如

dbt run --select staging.jira+

就會跑 staging 底下 jira 資料夾的所有 models 以及他們的下游。

如果我們依照資料來源系統分資料夾,一個資料來源系統放一個資料夾,我們就可以依照資料來源,設定不同的更新頻率。

例如我們希望 SAP 資料每小時更新,那我就會設定每小時跑的排程,執行以下指令:

dbt run --select staging.sap+

至於 Google Analytics,只需要一天更新一次,那我就會設定每天跑一次的排程,執行以下指令:

dbt run --select staging.google_analytics+

依 marts 資料夾更新

相對於選取資料來源,依照 staging 的資料夾更新,我們也可以依照 output 的種類來更新資料。

例如我們依照使用資料的部門來分 marts 的資料夾,我們就可以把 marketing 部門的資料集中在同一個資料夾。
當該部門要求資料更新時,我們就可以依照該資料夾來設定排程。

以下指令執行的是 marts 中,martketing 資料夾底下所有的 model,及所有上游的 models。

dbt run --select +marts.marketing

依 Exposure 更新

我們也可以以 DAY 20 提過的 exposures 為單位,更新資料。

例如我希望所有 Tableau 的資料,兩小時更新一次,我就可以在每兩小時跑一次的排程,執行以下指令。

dbt run --select +exposure:tableau_data_source

我們就可以告訴使用者,所有 Tableau 的資料源,皆為每兩小時更新一次。


另一個選擇:利用 tags 跑更新

最後,我們也可以幫每個資料夾或 model 設定 tags,使用這些 tags 為更新的單位。
tag 可以隨意設定,一個 model 可以設定多個 tags。

我們可以在 model 上方加上 tags:

{{ config(tags=["marketing", "google_analytics", "hourly_update"]) }}

或在 YAML 檔依資料夾設定

models:
  jaffle_shop:
    staging:
      google_analytics:
        +tags:
          - "marketing"
          - "google_analytics"
          - "hourly_update"

就可以依照 tag 跑指令:

dbt run --select tag:hourly_update

tags 可以有更多彈性,但也需要花點心思維護。


今日小結&明日預告

接下來四天會討論 dbt Core,在本機安裝環境以及開發,會有些技術門檻。

明天的主題:設定 dbt Core 本機環境

參考資料


歡迎加入 dbt community
對 dbt 或 data 有興趣 👋?歡迎加入 dbt community 到 #local-taipei 找我們,也有實體 Meetup 請到 dbt Taipei Meetup 報名參加


上一篇
DAY 21 - dbt 中階 (8) - 專案架構及命名原則
下一篇
DAY 23 - dbt Core 入門 (1) - 設定本機環境
系列文
dbt: 告別過時的SQL開發流程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言