我是 migo data team 的 Data Engineer Bruce ,我們團隊從開始研究 dbt 到實際轉換正式上線已將近一年,之後幾篇將分享 dbt 的特色功能, 中間碰到的坑以及有什麼特別解決辦法
→ 所以我們知道 dbt 使用於資料 ETL 中的 Transformation 部分,但為什麼 dbt 可以幫我們做更多事情以及更高品質? 他可以取代舊方法嗎? 這是本篇要討論的主題
以前使用的方法,以 bigquery 為例
執行 view 更新 table
# cmd
bq query --max_rows 3 --project_id {project_id} --replace
--destination_table "{project_id}:{dataset}.{to_table}"
"SELECT * FROM `{project_id}.{view_dataset}.{from_view}`"
我們把 table 的轉換邏輯寫在 {from_view} 中,使用 gcloud sdk 執行 bq query 每次 replace 掉{to_table},如果要做10 張 table 的 transaformation,就要列出 10 個 {to_table} for each 處理。再如果 table 間有順序性,就要寫成前後兩段的 shell 語法。所以只要 transformation 層數及 table 數量愈多,排程就會變很複雜,很複雜就會很難管理,很難管理的意思是你要新增修改刪除 column 或 table,都會影響到下游 table,非常容易出錯
dbt run --select {model}
不管10張100張 table,或是幾層的 table 相依關係,現在只要一行 dbt run 就可以取代掉。 所有 table 相依及 column 都寫在類似以前的 view,在 dbt 中我們稱為 model,dbt run 會幫你執行整段流程,幫你依照順序建好 table, view。
呼應開頭官方說的 dbt 優點,一行 dbt run 就可以幫你執行所有工作節省設定時間**,不需設定複雜的 table 相依關係幫你產出更高品質的結果不容易出錯,**這就是我認為 dbt 帶來最大的好處,假如你的 transformation 流程有碰到上述的痛點, 趕快開始研究 dbt 吧!
我開始決定要用 dbt 了,需要做什麼事? 依據官方文件操作了還碰到問題怎麼解決?
以下是我根據官方文件及過去一年的使用心得分享,若官方文件看了還有點模糊,可能對你有幫助
source: https://docs.getdbt.com/docs/introduction