引言
Apache Iceberg 是 Apache Foundation 認證的開源資料庫格式,專為處理大規模資料集而設計。其核心價值在於提供高效能的元資料管理與查詢規劃機制,支援結構共享、分區優化與分散式處理等特性。本文深入解析 Iceberg 的規劃架構,探討其如何透過持久樹資料結構與目錄系統,實現高效能的資料導航與查詢優化。
技術定義與核心概念
元資料結構
Iceberg 的元資料以持久樹資料結構儲存,透過結構共享機制降低更新成本。每個快照(Snapshot)代表表在特定時間點的讀視圖,包含所有相關檔案清單。元資料透過**目錄(Catalog)**映射表識別符至當前有效根元資料檔,僅儲存指標而非實際狀態。
元資料導航層級
- 清單檔(Manifest List):索引所有快照的清單檔,加速大規模元資料導航。
- 清單檔(Manifest):儲存檔案位置、分區資訊、列統計等,支援快速過濾。
- 刪除清單檔(Delete Manifest):獨立於資料清單檔,儲存刪除檔案資訊。
計畫流程與性能優化
本地規劃機制
- 清單過濾:根據查詢條件過濾潛在相關的清單檔,利用分區範圍(Partition Min/Max)快速排除無關清單。
- 檔案過濾:評估查詢條件對分區桶與列範圍的影響,根據執行緒數與叢集資源決定本地或分散式處理。
測試結果:
- 分區+排序鍵條件:0.25秒完成(本地處理)。
- 全表掃描:本地處理與分散式處理耗時相近(5秒內)。
分散式規劃優勢
- 並行處理:支援多個清單檔的並行處理,減少元資料處理時間。
- 限制:Spark 無真正分散式規劃支援,需序列化結果回傳至驅動器,導致20秒序列化開銷。
- 改進方向:未來版本將優化分散式規劃,避免資料序列化瓶頸。
關鍵技術點
- 結構共享:新快照繼承未變更的元資料,降低更新成本。
- 分區轉換(Partition Transform):隱藏分區欄位,支援資料分佈與排序。
- 最小最大索引(Min/Max Index):加速元資料過濾,減少無關資料處理。
- 混合處理:支援本地與分散式規劃,根據查詢選擇最佳策略。
刪除檔案處理
- 處理流程:
- 過濾潛在相關的刪除清單檔。
- 建立內存刪除索引,串流處理刪除資料。
- 並行處理資料規劃與刪除索引建立,提升效率。
- 測試結果:1000萬刪除檔案僅增加0.1秒處理時間,分散式處理需30秒處理刪除索引。
未解決問題
當前無法透過排序鍵(Sort Key)進行過濾,因使用 positional fleets 導致此限制。
未來展望
- Spark 改進:實現真正分散式規劃,避免結果序列化瓶頸。
- 預分配刪除:優化刪除索引建立成本,平衡處理效率與資源消耗。
- 擴展性:支援更大規模資料集(PB級),保持高效查詢性能。
總結
Apache Iceberg 透過持久樹資料結構與目錄系統,實現高效能的元資料管理與查詢規劃。其本地與分散式規劃機制,結合結構共享、分區轉換與最小最大索引等技術,有效提升查詢效能。未來隨著分散式規劃的優化與刪除索引的改進,Iceberg 將進一步強化其在大規模資料處理場景中的競爭力。