昨天 DAY 15 談的是如何開發 macro。
今天要聊的是在 dbt 如何安裝及使用 packages,使用別人寫好的 macro。
dbt Packages 就和我們在 Python, R, 或其他程式語言一樣,可以安裝需要的 library 或叫 packages,在自己的程式碼中使用,避免二次造輪子。
一般來說 package 的 README 都會提供基本的文件,照著做就能使用了。
以下用官方提供的 package: dbt_utils 為例,示範如何安裝,以及幾個使用的例子。
首先,在 dbt 專案的根目錄新增檔案 packages.yml,並貼入以下內容:
packages:
- package: dbt-labs/dbt_utils
version: 1.1.1
再執行指令
dbt deps
就完成安裝了。
以下用幾個 macro 舉例,示範不同的用法。
這個 macro 可以使用在 model 中,在相加數個欄位時,避免 null 的問題。
舉例
select
{{ dbt_utils.safe_add(['attribute_1', 'attribute_2']) }}
from table_1
compile出來的結果
select
coalesce(attribute_1, 0) +
coalesce(attribute_2, 0)
from table_1
當然我們也可以自己下 coalesce,但用 dbt_utils.safe_add 會比較簡短。
這個 macro 可以使用在 model,產出日期主檔。
注意傳入的 end_date 參數,要再多加一天,例如我想要產出 9/16-10/15 共 30 天,end_date 要放 10/16,結果才會正確。
{{ dbt_utils.date_spine(
datepart="day",
start_date="cast('2023-09-16' as date)",
end_date="cast('2023-10-16' as date)"
)
}}
Preview
date_day
2023-09-16T00:00:00
2023-09-17T00:00:00
2023-09-18T00:00:00
2023-09-19T00:00:00
2023-09-20T00:00:00
2023-09-21T00:00:00
2023-09-22T00:00:00
2023-09-23T00:00:00
2023-09-24T00:00:00
2023-09-25T00:00:00
2023-09-26T00:00:00
2023-09-27T00:00:00
2023-09-28T00:00:00
2023-09-29T00:00:00
2023-09-30T00:00:00
2023-10-01T00:00:00
2023-10-02T00:00:00
2023-10-03T00:00:00
2023-10-04T00:00:00
2023-10-05T00:00:00
2023-10-06T00:00:00
2023-10-07T00:00:00
2023-10-08T00:00:00
2023-10-09T00:00:00
2023-10-10T00:00:00
2023-10-11T00:00:00
2023-10-12T00:00:00
2023-10-13T00:00:00
2023-10-14T00:00:00
2023-10-15T00:00:00
剛剛提到的兩個都是在 model 中使用,現在要介紹可以在 yaml 中 generic test 使用的。
先前我們在 DAY 08 使用了 accepted_values 定義欄位允許出現的值。
version: 2
models:
- name: stg_orders
columns:
- name: status
tests:
- accepted_values:
values: ['placed', 'shipped', 'completed', 'return_pending', 'returned']
如果想要換個方式下,就可以使用這個 macro: dbt_utils.not_accepted_values
version: 2
models:
- name: stg_orders
columns:
- name: status
tests:
- dbt_utils.not_accepted_values:
values: ['pending_payment']
今天簡單介紹了 package 的安裝及使用方式,日後若遇到什麼難題,不妨查看看有沒有 package 可以使用吧!
明天的主題:dbt Graph
歡迎加入 dbt community
對 dbt 或 data 有興趣 👋?歡迎加入 dbt community 到 #local-taipei 找我們,也有實體 Meetup 請到 dbt Taipei Meetup 報名參加