iT邦幫忙

2023 iThome 鐵人賽

DAY 13
1

dbt artifacts 是什麼?

dbt artifacts 是執行 dbt 指令後,像是 dbt run, dbt test 會產生的各種 json 檔,有 log 記錄,執行結果…等,詳情可看 dbt artifacts 介紹。dbt artifacts 有很多用處,其中一項就是從中篩選 dbt test 結果並通知大家

dbt test 的結果怎麼處理?

當你運行 dbt test 失敗時,需要通知相關人員,因為他能能及時發現我們事先定義的異常問題。如果 test 結果失敗,它可能表示數據中存在異常,會影響資料最後的使用者

dbt test 的結果怎麼通知?

dbt test 可以像 dbt run 跑失敗了後,在你的排程回傳 error 訊息當作通知,但這會有兩個問題:

  1. 當你的 test 項目很多時(像我們團隊就超過 100 個),三不五時會跳出 test error, 但可能是不嚴重的問題,當你還沒解決時,下游的資料使用者可能會先來問你今天怎麼沒資料
  2. dbt test 的 console output 只有 test 名稱和錯誤筆數,當你想去看錯誤資料時,你還要特別寫一次 test query 查錯誤資料

因此對於 dbt test 我們需要特別處理,

問題1解法

我們可以在 dbt test 設定嚴重性,預設是 error,若是不嚴重的我們可以設 warn,排程就不會中斷

version: 2

models:
  - name: large_table
    columns:
      - name: slightly_unreliable_column
        tests:
          - unique:
              config:
                severity: error
                error_if: ">1000"
                warn_if: ">10"

問題2解法

我們可以將 dbt test 的結果存起來,這時就要用到開頭講到的 dbt artifacts ,我們可以把 dbt test 相關結果存在獨立的 dbt_artifact datebase,再從中篩選 error 的結果通知。

聽起來是個大工程,但好加在 dbt 已經把前段做好了,就是 Storing test failures

Storing test failures

dbt test 若加上 flag —store-failures ,dbt 就會將你的 test query 結果存到你的資料庫,命名為 dbt_test__audit,table 名稱是 test 的名字及測試對象的 table, column 的結合,dbt 也會附上你的 query 讓你查詢那些錯誤的資料,想了解更多 store_failures 請參閱

https://ithelp.ithome.com.tw/upload/images/20230928/20162689Cg7QvLcLYP.png

https://ithelp.ithome.com.tw/upload/images/20230928/20162689EORV4xH7uu.png

有沒有更好的方式?

用 —store-failures 的方式,讓你的 dbt test 有錯誤時可以快速查看。然而若你設定 test 嚴重性(severity) 是 warn,你的排程不會出錯,因此要收到通知需要需要自己寫通知程式查詢該 test 結果 table 有沒有資料,也就是 dbt 少了最後一哩在不中斷排程下做到通知的目的。因此下一篇會介紹 elementary 這個 dbt package,幫你補足最後一哩路,且優化前面流程


上一篇
data quality 系列 - dbt test 常用的 package: dbt.utils 介紹
下一篇
data quality 系列 - 如何透過 elementary 通知 dbt test 結果?
系列文
如何借助 dbt 優化當代資料倉儲及資料工程師的水肥之路分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言