dbt artifacts 是執行 dbt 指令後,像是 dbt run, dbt test 會產生的各種 json 檔,有 log 記錄,執行結果…等,詳情可看 dbt artifacts 介紹。dbt artifacts 有很多用處,其中一項就是從中篩選 dbt test 結果並通知大家
當你運行 dbt test 失敗時,需要通知相關人員,因為他能能及時發現我們事先定義的異常問題。如果 test 結果失敗,它可能表示數據中存在異常,會影響資料最後的使用者
dbt test 可以像 dbt run 跑失敗了後,在你的排程回傳 error 訊息當作通知,但這會有兩個問題:
因此對於 dbt test 我們需要特別處理,
我們可以在 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"
我們可以將 dbt test 的結果存起來,這時就要用到開頭講到的 dbt artifacts ,我們可以把 dbt test 相關結果存在獨立的 dbt_artifact datebase,再從中篩選 error 的結果通知。
聽起來是個大工程,但好加在 dbt 已經把前段做好了,就是 Storing test failures
dbt test 若加上 flag —store-failures ,dbt 就會將你的 test query 結果存到你的資料庫,命名為 dbt_test__audit,table 名稱是 test 的名字及測試對象的 table, column 的結合,dbt 也會附上你的 query 讓你查詢那些錯誤的資料,想了解更多 store_failures 請參閱
用 —store-failures 的方式,讓你的 dbt test 有錯誤時可以快速查看。然而若你設定 test 嚴重性(severity) 是 warn,你的排程不會出錯,因此要收到通知需要需要自己寫通知程式查詢該 test 結果 table 有沒有資料,也就是 dbt 少了最後一哩在不中斷排程下做到通知的目的。因此下一篇會介紹 elementary 這個 dbt package,幫你補足最後一哩路,且優化前面流程