題幹與適用場景
這是資料平台與分析工程職位常見的品質治理題。重點是把「資料可靠」拆成可測量的維度,連接到下游用途與處置動作,而不是只列出幾個檢查腳本。
面試官考察什麼
- 能否區分新鮮度、完整性、有效性、準確性、一致性與唯一性。
- 能否按資料產品與消費者定義不同的時間與品質目標。
- 能否設計偵測、分級告警、暫停下游與恢復後的補算流程。
- 能否保留品質證據、版本與血緣,避免警報變成噪音。
回答前需要釐清的問題
先確認資料是批次還是串流,業務時間與到達時間分別是什麼;哪些表或欄位面向客戶、財務或模型;允許多長延遲;是否有回填、遲到分區與時區;異常時下游應阻斷、降級,還是顯示最近一次可信快照。
30 秒回答框架
我會先按消費者用途定義資料契約,再為每個資料集配置新鮮度、數量、完整性與有效性規則。採集與轉換過程寫入品質結果與血緣,按警告與阻斷分級通知負責人;下游讀取品質狀態,必要時阻止發布並保留上一份可信快照。恢復後透過回填、重算與對帳關閉事件。
分步驟深入解答
1. 把品質維度綁定到用途
新鮮度回答「最近一次可用資料何時產生」,完整性回答必要欄位或分區是否齊全,數量檢查預期列數或位元組量,合法性檢查格式與範圍,一致性檢查跨表關係,唯一性檢查重複。不要給所有表套同一閾值;支付結算、營運看板與離線訓練的容忍度不同。
2. 定義可執行的 SLA 與 SLO
為每個資料集記錄業務截止時間、最大延遲、允許缺失比例、阻斷條件、負責人與升級時間。區分「資料已到但未通過品質檢查」和「上游根本沒有新資料」,分別統計。對遲到資料給出允許回填窗口,超過窗口後明確標記不可用。
3. 將檢查結果作為帶版本的證據
每次執行保存規則版本、資料批次或分區、觀測值、閾值、執行時間、輸入輸出血緣與結果。規則可用 Expectation 或同類聲明式定義,並把結果寫入可查詢的品質帳本。規則變更要評估歷史基線,避免僅因調整閾值就掩蓋退化。
4. 設計告警、阻斷與降級
告警按影響範圍與嚴重度路由給資料負責人、平台值班與業務消費者。可恢復的單分區缺失先標記延遲並保留上一份可信快照;會污染財務或模型的完整性、有效性失敗應阻斷發布。每個阻斷都要有逾時升級、手動批准與解除條件。
5. 用回填與對帳完成閉環
修復上游後按分區或業務時間回填,重跑相同版本的轉換與品質規則,記錄補算批次,避免重複寫入。用輸入列數、輸出列數、拒絕數、遲到數與下游消費數對帳;恢復後檢查品質指標回到基線,再於復盤中調整規則、閾值或責任邊界。
高品質示範回答
我會先按消費者定義資料契約。結算表要求在每日截止後一小時內到齊,核心欄位完整率必須達到閾值;探索性看板可以容忍更長延遲。每個資料集配置新鮮度、分區數量、必填欄位、範圍與跨表一致性檢查,保存規則版本、觀測值、批次、血緣與負責人。新鮮度逾時先發警告,財務表的完整性失敗則阻斷發布並提供上一份帶時間戳的可信快照。上游修復後按業務時間回填,復用同一轉換與檢查版本,用輸入、輸出、拒絕與消費計數對帳,確認指標恢復後關閉事件。
常見錯誤
- 只監控任務是否成功,不檢查資料是否新鮮、完整與有效。
- 給所有資料集設定一個全域閾值,不考慮消費者與業務截止時間。
- 把品質結果寫在日誌裡,無法關聯批次、規則版本與血緣。
- 所有失敗都阻斷全部下游,導致局部問題擴大成全域停擺。
- 修復後直接覆蓋歷史,沒有回填批次、對帳與重複寫入保護。
- 只報一個品質分數,消費者不知道具體哪一維不可用。
追問與應對
上游沒有新資料,但任務仍然成功怎麼辦?
用到達時間與業務時間分別檢查,並以最後可信分區與預期更新頻率判斷新鮮度。任務成功只代表程式執行,不代表資料滿足 SLA;逾時應產生品質事件。
品質規則本身誤報怎麼辦?
保留觀測值、閾值與規則版本,先以影子模式觀察基線,再使用分層閾值與異常比例觸發。誤報事件要記錄消費者影響,經評審後調整規則,不能靜默關閉告警。
是否應該阻斷所有下游?
按血緣與用途分級。會污染結算或模型的失敗可阻斷相關發布,獨立的探索性資料可以繼續使用帶警示的上一版本;阻斷範圍與解除條件都要可稽核。
如何證明恢復後沒有漏數?
對帳批次、分區、輸入輸出列數、拒絕記錄、遲到記錄與下游消費數,並抽樣核對主鍵集合。回填批次必須可重放、可追蹤,重複執行應得到相同結果。