

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Iceberg 的運作方式
<a name="emr-iceberg-how-it-works"></a>

Iceberg 追蹤資料表中而非目錄中的個別資料檔案。這樣，寫入器可以在就地建立資料檔案 (檔案不會移動或變更)。此外，寫入器只能在明確遞交時將檔案新增至資料表。資料表狀態在中繼資料檔案中維護。對資料表狀態的所有變更都會建立一個新的中繼資料檔案，此檔案會以原子方式取代舊的中繼資料。資料表中繼資料檔案可追蹤資料表結構描述、分割組態及其他屬性。

 它還包括資料表內容的快照。每個快照都是資料表中某個時間點的一組完整的資料檔案。快照列在中繼資料檔案中，但快照中的檔案儲存在個別清單檔案中。透過在資料表中繼資料檔案之間進行原子轉換來實現快照隔離。讀取器使用載入資料表中繼資料時的最新快照。讀取器在重新整理並選擇新的中繼資料位置之前，不會受變更影響。快照中的資料檔案儲存在一或多個清單檔案中，其中包含資料表中的每個資料檔案、分割區資料及其指標的一個資料列。快照是清單檔案中所有檔案的聯集。清單檔案還可以在快照之間共用，以避免重寫不常變更的中繼資料。

**Iceberg 快照圖**

![兩個快照的圖表。每個快照都有自己的清單檔案清單，此清單儲存有關多個可重複使用的清單檔案的中繼資料。每個清單檔案都參考一或多個資料檔案。](http://docs.aws.amazon.com/zh_tw/emr/latest/ReleaseGuide/images/Iceberg-snapshot-diagram.png)


Iceberg 提供下列功能：
+ 支援 Amazon S3 資料湖中的 ACID 交易和時間歷程。
+ 遞交重試受益於[開放式並行](https://iceberg.apache.org/spec/#optimistic-concurrency)的效能優勢。
+ 由於解決了檔案層級衝突問題，因此具有高度並行能力。
+ 透過中繼資料中每資料欄的最小最大統計資料，您可以略過檔案，從而提高選擇性查詢的效能。
+ 您可以將資料表組織成靈活的分割區配置，分割區演變可以更新分割區方案。然後，查詢和資料磁碟區可以在不依賴實體目錄的情況下進行變更。
+ 支援[結構描述演變](https://iceberg.apache.org/docs/latest/evolution/#schema-evolution)和強制執行。
+ Iceberg 資料表作為等冪性接收器和可重放的來源。這樣可透過一次精確的管道，即可進行串流和批次支援。等冪性接收器會追蹤過去成功的寫入操作。因此，如果發生故障，接收器可以再次請求資料；如果多次傳送資料，則捨棄資料。
+ 檢視歷史記錄和歷程，包括資料表演變、操作歷史記錄和每次遞交的統計資料。
+ 透過選擇資料格式 (Parquet、ORC、Avro) 和分析引擎 (Spark、Trino、PrestoDB、Flink、Hive)，從現有資料集遷移。