具代表性的面試主題

資料工程面試:如何安全升級 Iceberg 1.10.2 並驗證刪除語意?

資料困難
Offer.cc 編輯團隊發佈 更新

題幹

你的資料湖使用 Iceberg 表,準備從 1.10.1 升級到 1.10.2。表包含 equality deletes、v2 deletes 與並行寫入,且升級版本包含安全修復。請設計升級、驗證、回滾與清理策略。

題幹與適用場景

你的資料湖使用 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 矩陣測試;安全掃描通過不代表刪除語意正確。

公開來源

同類題目