

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

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

將 Hudi 與 Amazon EMR 搭配使用時，您可以使用 Spark Data Source API 或 Hudi DeltaStreamer 公用程式將資料寫入資料集。Hudi 將資料集組織到 `{{basepath}}` 下類似於傳統 Hive 資料表的分割目錄結構。有關資料如何配置為這些目錄中的檔案，具體情況取決於您選擇的資料集類型。您可以選擇「寫入時複製」(CoW) 或「讀取時合併」(MoR)。

無論資料集類型為何，資料集中的每個分割區都藉由其相對於 `basepath` 的 `partitionpath` 來唯一標識。在每個分割區中，記錄會分散到多個資料檔案中。如需詳細資訊，請參閱 Apache Hudi 文件中的[檔案管理](https://hudi.apache.org/docs/concepts#file-management)。

Hudi 中的每個動作都有一個相應的遞交，透過名為 *Instant* 的單調增加時間戳記加以識別。Hudi 會將一系列在資料集上執行的所有動作保留為時間軸。Hudi 倚賴此時間軸提供讀取器和寫入器之間的快照隔離，並可復原至前一個時間點。如需有關 Hudi 記錄的動作和動作狀態的詳細資訊，請參閱 Apache Hudi 文件中的[時間軸](https://hudi.apache.org/docs/concepts.html#timeline)。

## 了解資料集儲存類型：寫入時複製與讀取時合併
<a name="emr-hudi-data-files"></a>

當您建立 Hudi 資料集時，可以指定資料集在寫入時複製或在讀取時合併。
+ **寫入時複製 (CoW)** – 資料會以單欄式格式 (Parquet) 存放，每次更新都會在寫入期間建立新版本的檔案。CoW 是預設儲存類型。
+ **讀取時合併 (MoR)** – 資料的存放是使用單欄式 (Parquet) 和以資料行為基礎 (Avro) 格式的組合。更新會記錄到以資料列為基礎的 *delta* 檔案，並視需要壓縮以建立新版本的直欄式檔案。

使用 CoW 資料集，每次有記錄進行更新時，包含記錄的檔案就會以更新的值重寫。若使用 MoR 資料集，每次有更新時，Hudi 只會寫入已變更之記錄的資料行。MoR 更適合較少讀取，而寫入或變更較繁重的工作負載。CoW 更適合資料變更較不頻繁，而讀取作業較為繁重的工作負載。

Hudi 提供了用於存取資料的三個邏輯檢視：
+ **讀取優化檢視** – 提供來自 CoW 資料表的最新遞交資料集，以及來自 MoR 資料表的最新壓縮資料集。
+ **增量檢視** – 提供 CoW 資料集中的兩個動作之間的變更資料流，以饋送下游作業和擷取、轉換、載入 (ETL) 作業流程。
+ **即時檢視** – 透過合併直欄式和以列為基礎的檔案內嵌，提供來自 MoR 資料表的最新遞交資料。

當您查詢讀取最佳化檢視時，查詢會傳回所有壓縮的資料，但不包含最新的 delta 遞交。查詢此資料可提供良好的讀取效能，但會省略最新的資料。當您查詢即時檢視時，Hudi 會合併壓縮的資料與讀取時的 delta 遞交。最新的資料可用於查詢，但合併的運算作業負擔會使查詢效能降低。查詢壓縮資料或即時資料的能力，可讓您在查詢時選擇效能或彈性。

如需有關在儲存類型之間取捨的詳細資訊，請參閱 Apache Hudi 文件中的[儲存類型和檢視](https://hudi.apache.org/docs/concepts.html#storage-types--views)。

Hudi 會在 MoR 的 Hive 中繼存放區中建立兩個資料表：具有您指定名稱的資料表 (讀取優化檢視)，以及附加 `_rt` 的相同名稱資料表 (即時檢視)。您可以查詢這兩個資料表。

## 向您的中繼存放區註冊 Hudi 資料集
<a name="emr-hudi-hive-metastore"></a>

當您向 Hive 中繼存放區註冊 Hudi 資料表時，可以使用 Hive、Spark SQL 或 Presto 查詢 Hudi 資料表，如同您查詢其他任何資料表。此外，您可以將 Hive AWS 和 Spark 設定為使用 AWS Glue Data Catalog 作為中繼存放區，以將 Hudi 與 Glue 整合。對於 MoR 資料表，Hudi 會將資料集註冊為中繼存放區中的兩個資料表：具有您指定名稱的資料表 (讀取優化檢視)，以及附加 `_rt` 的相同名稱資料表 (即時檢視)。

當您將 `HIVE_SYNC_ENABLED_OPT_KEY` 選項設定為 `"true"` 並提供其他所需的屬性以使用 Spark 建立 Hudi 資料集時，您將會向 Hive 中繼存放區註冊 Hudi 資料表。如需詳細資訊，請參閱[使用 Hudi 資料集](emr-hudi-work-with-dataset.md)。此外，您可以使用 hive\_sync\_tool 命令列公用程式，分別將 Hudi 資料集註冊為中繼儲存區中的資料表。