在 CI 流程的最後階段,檢查改動後的資料差異是一個重要步驟。本文將探討為什麼這項檢查如此重要,以及我們如何實現自動化檢查。
為什麼需要檢查資料差異?
人工檢查的局限性
我們先前 CI 流程中的資料檢查主要依賴人力和經驗,包括檢查資料筆數、欄位增減、欄位型態和特定指標等。然而,這種方法存在幾個問題:
- 容易遺漏:人為因素可能導致檢查不完全。
- 時間壓力:緊急的 PR 可能導致檢查被簡化或忽略。
- 耗時耗力:大量改動時,全面檢查需要大量時間和人力。
我們曾在一次 BI 大規模修改 models 時遇到問題。由於改動數量龐大,DE 團隊沒有仔細檢查每張表的欄位型態。結果,一張表的欄位型態變更影響了下游欄位,導致排程出錯。雖然問題被迅速發現並解決,但這次經驗凸顯了自動化檢查的必要性。
自動化檢查的實現
為了解決上述問題,我們決定在每次 CI 中自動檢查資料差異,並生成檢查報告。
檢查項目
我們的檢查項目分為兩大類:
- 通用檢查
- 資料筆數比對
- 欄位增減檢測
- 欄位型態變化識別
- 孤兒物件檢查
- 客製化檢查
考慮到開發成本,我們團隊優先實現通用檢查項目。
檢查項目說明
-
資料筆數:比對測試環境和正式環境相應表格的資料筆數,計算差異。
-
欄位增減:比對兩個環境中相應表格的所有欄位,識別新增或刪除的欄位。
-
欄位型態變化:檢查兩個環境中相應欄位的資料類型,標記發生型態變化的欄位。
-
孤兒物件:識別存在於 BigQuery 但不在 dbt models 中的物件,這可能是由於 model 重命名後未刪除舊表所致(不刪除可能導致其他使用者使用到舊表)。
實作自動化檢查
我們選擇使用 Python 開發自動化檢查程序,主要基於以下考慮:
- Python 擁有豐富的套件生態系統,包括支持 dbt、BigQuery 和 git 操作的套件。
- Python 適合進行數據處理和自動化任務。
在接下來的系列文章中,我們將深入探討實現這些檢查的技術細節。