Apache Iceberg 計畫解析

引言

Apache Iceberg 是 Apache Foundation 認證的開源資料庫格式,專為處理大規模資料集而設計。其核心價值在於提供高效能的元資料管理與查詢規劃機制,支援結構共享、分區優化與分散式處理等特性。本文深入解析 Iceberg 的規劃架構,探討其如何透過持久樹資料結構與目錄系統,實現高效能的資料導航與查詢優化。

技術定義與核心概念

元資料結構

Iceberg 的元資料以持久樹資料結構儲存,透過結構共享機制降低更新成本。每個快照(Snapshot)代表表在特定時間點的讀視圖,包含所有相關檔案清單。元資料透過**目錄(Catalog)**映射表識別符至當前有效根元資料檔,僅儲存指標而非實際狀態。

元資料導航層級

  • 清單檔(Manifest List):索引所有快照的清單檔,加速大規模元資料導航。
  • 清單檔(Manifest):儲存檔案位置、分區資訊、列統計等,支援快速過濾。
  • 刪除清單檔(Delete Manifest):獨立於資料清單檔,儲存刪除檔案資訊。

計畫流程與性能優化

本地規劃機制

  1. 清單過濾:根據查詢條件過濾潛在相關的清單檔,利用分區範圍(Partition Min/Max)快速排除無關清單。
  2. 檔案過濾:評估查詢條件對分區桶與列範圍的影響,根據執行緒數與叢集資源決定本地或分散式處理。

測試結果

  • 分區+排序鍵條件:0.25秒完成(本地處理)。
  • 全表掃描:本地處理與分散式處理耗時相近(5秒內)。

分散式規劃優勢

  • 並行處理:支援多個清單檔的並行處理,減少元資料處理時間。
  • 限制:Spark 無真正分散式規劃支援,需序列化結果回傳至驅動器,導致20秒序列化開銷。
  • 改進方向:未來版本將優化分散式規劃,避免資料序列化瓶頸。

關鍵技術點

  • 結構共享:新快照繼承未變更的元資料,降低更新成本。
  • 分區轉換(Partition Transform):隱藏分區欄位,支援資料分佈與排序。
  • 最小最大索引(Min/Max Index):加速元資料過濾,減少無關資料處理。
  • 混合處理:支援本地與分散式規劃,根據查詢選擇最佳策略。

刪除檔案處理

  • 處理流程
    1. 過濾潛在相關的刪除清單檔。
    2. 建立內存刪除索引,串流處理刪除資料。
    3. 並行處理資料規劃與刪除索引建立,提升效率。
  • 測試結果:1000萬刪除檔案僅增加0.1秒處理時間,分散式處理需30秒處理刪除索引。

未解決問題

當前無法透過排序鍵(Sort Key)進行過濾,因使用 positional fleets 導致此限制。

未來展望

  • Spark 改進:實現真正分散式規劃,避免結果序列化瓶頸。
  • 預分配刪除:優化刪除索引建立成本,平衡處理效率與資源消耗。
  • 擴展性:支援更大規模資料集(PB級),保持高效查詢性能。

總結

Apache Iceberg 透過持久樹資料結構與目錄系統,實現高效能的元資料管理與查詢規劃。其本地與分散式規劃機制,結合結構共享、分區轉換與最小最大索引等技術,有效提升查詢效能。未來隨著分散式規劃的優化與刪除索引的改進,Iceberg 將進一步強化其在大規模資料處理場景中的競爭力。