

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

# 使用 Iceberg 資料表格式規格第 3 版
<a name="table-spec-v3"></a>

Apache Iceberg 資料表格式規格的最新版本是第 3 版。此版本推出進階功能，可建置 PB 級資料湖，以改善效能並降低營運開銷。它解決了第 2 版遇到的常見效能瓶頸，特別是在批次更新和合規刪除操作方面。

AWS 支援 Iceberg 第 3 版規格中定義的刪除向量和資料列歷程。這些功能可在下列 Apache Spark 上使用 AWS 服務。<a name="support-table"></a>


| AWS 服務 | 第 3 版支援 | 
| --- | --- | 
|  [Amazon EMR for Apache Spark](iceberg-emr.md)  |  Amazon EMR 7.12 版及更新版本  | 
|  [AWS Glue](iceberg-glue.md)  |  是  | 
|  AWS Glue：[Iceberg REST API](https://docs.aws.amazon.com/glue/latest/dg/connect-glu-iceberg-rest.html)、資料表維護  |  是  | 
|  [Amazon SageMaker Unified Studio 筆記本](https://docs.aws.amazon.com/next-generation-sagemaker/)  |  是  | 
|  Amazon S3 資料表：[Iceberg REST API](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-integrating-open-source.html)、[資料表維護](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-maintenance-overview.html)  |  是  | 
|  [Amazon Athena (Trino)](https://docs.aws.amazon.com/athena/latest/ug/engine-versions-reference-0003.html)  |  否  | 

## 第 3 版的主要功能
<a name="v3-features"></a>

**刪除向量**會以儲存為 Puffin 檔案的有效二進位格式取代第 2 版中使用的位置刪除檔案。這可消除隨機批次更新和一般資料保護法規 (GDPR) 合規刪除的寫入放大，並大幅降低維護新資料的額外負荷。處理高頻率更新的組織將立即改善寫入效能，並從較少的小型檔案降低儲存成本。

**資料列譜系**可在資料列層級啟用精確的變更追蹤。您的下游系統可以逐步處理變更，加速資料管道並降低變更資料擷取 (CDC) 工作流程的運算成本。此內建功能不需要自訂變更追蹤實作。

## 版本相容性
<a name="v3-version-compatibility"></a>

第 3 版維持與第 2 版資料表的回溯相容性。AWS 服務同時支援第 2 版和第 3 版資料表，因此您可以：
+ 跨第 2 版和第 3 版資料表執行查詢。
+ 將現有的第 2 版資料表升級至第 3 版，無需重新寫入資料。
+ 跨越第 2 版和第 3 版快照的執行時間歷程查詢。
+ 跨資料表版本使用結構描述演變和隱藏分割。

## 第 3 版入門
<a name="v3-getting-started"></a>

### 先決條件
<a name="v3-prerequisites"></a>

使用第 3 版資料表之前，請確定您已：
+  AWS 帳戶 具有適當 AWS Identity and Access Management (IAM) 許可的 。
+ 存取一或多個 AWS 分析服務 (Amazon EMR AWS Glue、Amazon SageMaker Unified Studio 筆記本或 Amazon S3 Tables)。
+ 用於儲存資料表資料和中繼資料的 S3 儲存貯體。
+ 如果您要建置自己的 Iceberg 基礎設施，可使用資料表儲存貯體開始使用 Amazon S3 Tables 或一般用途 S3 儲存貯體。
+ 已設定的 AWS Glue 目錄。

### 建立第 3 版資料表
<a name="v3-creating-tables"></a>

#### 建立新的資料表
<a name="v3-new-tables"></a>

若要建立新的 Iceberg 第 3 版資料表，請將`format-version`資料表屬性設定為 3。

使用 Spark SQL：

```
CREATE TABLE IF NOT EXISTS myns.orders_v3 (
    order_id bigint,
    customer_id string,
    order_date date,
    total_amount decimal(10,2),
    status string,
    created_at timestamp
)
USING iceberg
TBLPROPERTIES (
    'format-version' = '3'
)
```

#### 將第 2 版資料表升級至第 3 版
<a name="v3-upgrading-tables"></a>

您可以將現有的第 2 版資料表以原子方式升級至第 3 版， 而無需重寫資料。

使用 Spark SQL：

```
ALTER TABLE myns.existing_table
SET TBLPROPERTIES ('format-version' = '3')
```

**重要**  
第 3 版是單向升級。資料表從第 2 版升級至第 3 版之後，就無法透過標準操作降級回第 2 版。

升級期間會發生什麼情況：
+ 會以原子方式建立新的中繼資料快照。
+ 重複使用現有的 Parquet 資料檔案。
+ 資料列譜系欄位會新增至資料表中繼資料。

升級後：
+ 下一個壓縮動作會移除舊版本 2 的刪除檔案。
+ 新的修改將使用第 3 版刪除向量檔案。

升級不會執行資料列歷程變更追蹤記錄的歷史回填。

### 啟用刪除向量
<a name="v3-deletion-vector"></a>

若要利用刪除向量進行更新、刪除和合併，請設定您的寫入模式。

使用 Spark SQL：

```
ALTER TABLE myns.orders_v3
SET TBLPROPERTIES ('format-version' = '3',
                   'write.delete.mode' = 'merge-on-read',
                   'write.update.mode' = 'merge-on-read',
                   'write.merge.mode' = 'merge-on-read'
                  )
```

這些設定可確保更新、刪除和合併操作會建立刪除向量檔案，而不是重寫整個資料檔案。

### 使用資料列歷程記錄進行變更追蹤
<a name="v3-deletion-vector"></a>

第 3 版會自動新增資料列歷程中繼資料欄位以追蹤變更。

使用 Spark SQL：

```
# Query with parameter value provided
last_processed_sequence = 47

SELECT 
    id,
    data,
    _row_id,
    _last_updated_sequence_number
FROM myns.orders_v3
WHERE _last_updated_sequence_number > :last_processed_sequence
```

`_row_id` 欄位可唯一識別每一列，並 `_last_updated_sequence_number`追蹤列上次修改的時間。使用這些欄位來：
+ 識別變更的資料列以進行增量處理。
+ 追蹤資料歷程以確保合規。
+ 最佳化 CDC 管道。
+ 僅處理變更以降低運算成本。

## 第 3 版的最佳實務
<a name="v3-best-practices"></a>

### 何時使用第 3 版
<a name="v3-when-to-use"></a>

在下列情況下，請考慮升級到第 3 版或從第 3 版開始：
+ 您經常執行批次更新或刪除。
+ 您需要符合 GDPR 或合規刪除要求。
+ 您的工作負載涉及高頻率 upsert。
+ 您需要有效率的 CDC 工作流程。
+ 您想要降低小型檔案的儲存成本。
+ 您需要更好的變更追蹤功能。

### 最佳化寫入效能
<a name="v3-write-performance"></a>
+ 為繁重的更新工作負載啟用刪除向量：

  ```
  SET TBLPROPERTIES (
  'write.delete.mode' = 'merge-on-read',
  'write.update.mode' = 'merge-on-read',
  'write.merge.mode' = 'merge-on-read'
  )
  ```
+ 設定適當的檔案大小：

  ```
  SET TBLPROPERTIES (
  'write.target-file-size-bytes' = '536870912'  — 512 MB
  )
  ```

### 最佳化讀取效能
<a name="v3-read-performance"></a>
+ 使用資料列譜系進行增量處理。
+ 使用時間歷程來存取歷史資料，無需複製。
+ 啟用統計資料收集，以便更好地規劃查詢。

## 遷移策略
<a name="v3-migration"></a>

當您從第 2 版遷移到第 3 版時，請遵循下列最佳實務：
+ 首先在非生產環境中進行測試，以驗證升級程序和效能。
+ 在低活動期間升級，將對並行操作的影響降至最低。
+ 監控初始效能，並在升級後追蹤指標。
+ 執行壓縮以在升級後合併刪除檔案。
+ 更新您的團隊文件以反映第 3 版功能。

## 相容性考量
<a name="v3-compatibility"></a>
+ 引擎版本 – 確定存取資料表的所有引擎都支援第 3 版。
+ 第三方工具 – 在升級之前，請確認工具的第 3 版相容性。
+ 備份策略 – 測試快照型復原程序。
+ 監控 – 更新第 3 版特定指標的監控儀表板。

## 疑難排解
<a name="v3-troubleshooting"></a>

### 常見問題
<a name="v3-common-issues"></a>

**錯誤：「不支援 格式版本 3」**
+ 確認您的引擎版本支援第 3 版。 如需詳細資訊，請參閱本節開頭的[表格](#support-table)。
+ 檢查目錄相容性。
+ 請確定您使用的是最新版本的 AWS 服務。

**升級後效能降低**
+ 確認沒有壓縮壓縮失敗。如需詳細資訊，請參閱 Amazon [ S3 文件中的記錄和監控 S3 資料表](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-monitoring-overview.html)。 Amazon S3 
+ 確認已啟用刪除向量。應設定下列屬性：

  ```
  SET TBLPROPERTIES (
  'write.delete.mode' = 'merge-on-read',
  'write.update.mode' = 'merge-on-read',
  'write.merge.mode' = 'merge-on-read'
  )
  ```

  您可以使用下列程式碼來驗證資料表屬性：

  ```
  DESCRIBE FORMATTED myns.orders_v3
  ```
+ 檢閱您的分割區策略。過度分割可能會導致小型檔案。執行下列查詢以取得資料表的平均檔案大小：

  ```
  SELECT avg(file_size_in_bytes) as avg_file_size_bytes 
  FROM myns.orders_v3.files
  ```

**與第三方工具不相容**
+ 確認工具支援第 3 版規格。
+ 考慮維護不支援工具的第 2 版資料表。
+ 請聯絡工具廠商以取得其第 3 版支援時間表。

### 取得說明
<a name="v3-help"></a>
+ 如需 AWS 服務了解特定問題，請聯絡 [AWS 支援](https://aws.amazon.com/contact-us/)。
+ 若要從 Iceberg 社群取得協助，請使用 [Iceberg Slack 頻道](https://iceberg.apache.org/community/)。
+ 如需有關使用 AWS 服務 管理分析工作負載的資訊，請參閱 [上的分析 AWS](https://aws.amazon.com/big-data/datalakes-and-analytics/)。

## 定價
<a name="v3-pricing"></a>
+ [Amazon EMR 運算和儲存定價](https://aws.amazon.com/emr/pricing/)
+ [Amazon SageMaker 定價](https://aws.amazon.com/sagemaker/pricing/)
+ [AWS Glue 任務執行和 Data Catalog 定價](https://aws.amazon.com/glue/pricing/)
+ [S3 Tables 儲存和請求定價](https://aws.amazon.com/s3/pricing/)

## 可用性
<a name="v3-availability"></a>

Iceberg 資料表格式規格第 3 版支援適用於 Amazon EMR AWS Glue AWS Glue Data Catalog、 和 S3 Tables 運作的所有 AWS 區域 。如需區域可用性，請參閱[AWS 服務 依區域](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。

## 其他資源
<a name="v3-resources"></a>
+ [Apache Iceberg 文件](https://iceberg.apache.org/docs/latest/)
+ [Apache Iceberg 資料表規格](https://iceberg.apache.org/spec/)
+ [將表格式資料從 Amazon S3 遷移至 S3 資料表的指引](https://aws.amazon.com/solutions/guidance/migrating-tabular-data-from-amazon-s3-to-s3-tables/)
+ [教學課程：S3 資料表入門](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-getting-started.html)