題幹與適用場景
你的資料湖使用 Iceberg 表,準備從 1.10.1 升級到 1.10.2。表包含 equality deletes、v2 deletes 與並行寫入,且升級版本包含安全修復。請設計升級、驗證、回滾與清理策略。
Apache Iceberg 官方記錄 1.10.2 於 2026 年 5 月 18 日發布,包含 equality delete schema ordering、提交後快照載入、防止錯誤檔案清理、並行格式升級校驗,以及依賴安全修復。重點是把版本說明轉成資料正確性證據。
面試官考察點
- 能否區分表格式規範、引擎實作、Catalog、FileIO 與執行期依賴。
- 能否說明 equality deletes、position deletes、刪除向量與快照可見性的關係。
- 能否設計影子驗證、並行寫入測試、檔案清理保護與回滾窗口。
- 能否識別「依賴升級成功」不等於「歷史查詢正確」。
- 能否給出可稽核指標、停止線與升級後清理條件。
需要先釐清的問題
- 使用哪些引擎、Catalog、物件儲存與 Iceberg runtime 版本?是否多語言寫入?
- 表格式版本、刪除檔案類型、分區策略、快照保留與並行提交量是多少?
- 升級只替換客戶端依賴,還是同時改變 writer、reader 與 catalog 服務?
- 是否存在不能暫停的串流寫入與必須連續服務的下游查詢?
版本與相容矩陣
先鎖定所有元件的實際依賴樹與部署版本,建立 reader、writer、Catalog、FileIO、物件儲存與清理作業矩陣。1.10.2 的修復不能自動證明舊引擎理解新中繼資料;應以官方相容說明與真實回放驗證為準。把升級拆成唯讀 reader、離線 writer、線上 writer 與清理任務幾個階段。
在灰度環境複製生產快照、刪除檔案與並行提交,記錄每個元件讀取的 snapshot ID、manifest 數量、delete file 數量與表格式版本。任何未知相容性都標記阻斷項,不用「看起來能讀」作為放行證據。
刪除語意與正確性驗證
建立包含相同 equality key、多版本資料列、position delete、刪除向量與並行更新的黃金資料集。用升級前後 reader 對同一 snapshot、時間旅行查詢與增量讀取做結果比對,檢查資料列數、主鍵集合、聚合與 schema 順序。對 delete application 記錄被過濾資料列數與未匹配刪除數。
驗證不能只看最新資料表,因為錯誤刪除可能在 compact 後才暴露。保留原始 manifest、delete file 與 snapshot 日誌,並與獨立 SQL 或小型精確實作交叉核對。失敗時保留快照,不立即 expire。
並行提交與快照保護
升級期間執行 append、overwrite、row-level delete 與 compaction 並行測試,注入提交衝突、Catalog 逾時與物件儲存短暫 503。確認失敗交易不會清理仍被活動快照引用的檔案,成功提交後 reader 看到一致 snapshot。對 v2 deletes 與格式升級同時發生的場景設定專門停止線。
清理作業必須根據保留策略、活動查詢、分支或標籤引用與提交時間計算候選檔案;候選檔案先進入延遲佇列,再第二次確認後刪除。回滾窗口內禁止不可逆清理,避免刪掉可讀歷史。
部署、回滾與資料治理
採用分批發布:先唯讀服務,再低流量 writer,最後擴展到所有作業。每批記錄錯誤率、snapshot 提交延遲、查詢結果差異、delete miss、物件儲存 404、清理候選量與資源開銷。回滾優先切回相容客戶端版本,保留新提交產生的快照供審查;不要透過刪除中繼資料「回滾」。
依賴安全修復要在建置產物中鎖定並掃描傳遞依賴。若 1.10.2 移除或改變測試夾具或 runtime artifact,先在建置矩陣驗證打包、類別路徑與授權,再進入生產。所有手工豁免寫入稽核記錄並設定到期日。
失敗演練與發布門檻
演練 equality delete schema 順序變化、並行格式升級、快照載入失敗、清理任務收到 503、舊 reader 讀取新快照、物件儲存延遲與恢復期間重複提交。發布門檻包括零不可解釋結果差異、delete miss 在預算內、無活動快照檔案被清理、回滾後歷史查詢可讀與依賴掃描通過。
若差異只出現在排序,確認是否為未定義順序;若主鍵集合或刪除可見性差異,立即停止擴展。升級完成後等待保留窗口和觀測期結束,再逐步恢復清理,不得因磁碟壓力跳過證據保存。
延伸追問與參考答案
為什麼不能只做最新快照的資料列數比較?
它無法覆蓋時間旅行、增量讀取、刪除檔案套用與歷史快照清理。至少要對黃金資料集比較多個 snapshot、主鍵集合、聚合與 delete miss。
如何證明回滾安全?
保留升級前後快照、停止不可逆清理,驗證舊 reader 能讀保留窗口內歷史,並演練提交衝突與物件儲存故障後的恢復。
依賴安全修復如何進入資料驗證?
鎖定傳遞依賴並掃描建置產物,同時執行類別路徑、授權與 reader/writer 矩陣測試;安全掃描通過不代表刪除語意正確。