iT邦幫忙

2023 iThome 鐵人賽

DAY 16
1

昨天 DAY 15 談的是如何開發 macro。
今天要聊的是在 dbt 如何安裝及使用 packages,使用別人寫好的 macro。

dbt Packages 就和我們在 Python, R, 或其他程式語言一樣,可以安裝需要的 library 或叫 packages,在自己的程式碼中使用,避免二次造輪子。

一般來說 package 的 README 都會提供基本的文件,照著做就能使用了。
以下用官方提供的 package: dbt_utils 為例,示範如何安裝,以及幾個使用的例子。


安裝 package: dbt_utils

首先,在 dbt 專案的根目錄新增檔案 packages.yml,並貼入以下內容:

packages:
  - package: dbt-labs/dbt_utils
    version: 1.1.1

再執行指令

dbt deps

就完成安裝了。


使用 package: dbt_utils

以下用幾個 macro 舉例,示範不同的用法。

dbt_utils.safe_add

這個 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 會比較簡短。

dbt_utils.date_spine

這個 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

dbt_utils.not_accepted_values

剛剛提到的兩個都是在 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 報名參加


上一篇
DAY 15 - dbt 中階 (2) - dbt Macros
下一篇
DAY 17 - dbt 中階 (4) - dbt Graph
系列文
dbt: 告別過時的SQL開發流程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
Calvin
iT邦新手 4 級 ‧ 2023-10-01 21:32:34

河河河河河河

Stacy Lo iT邦新手 4 級 ‧ 2023-10-01 21:45:50 檢舉

河河河河河河

0
sponge1220
iT邦新手 4 級 ‧ 2023-10-01 23:12:47

河河河河河河

Stacy Lo iT邦新手 4 級 ‧ 2023-10-02 00:08:05 檢舉

河河河河河河

我要留言

立即登入留言