

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

# 使用 Apache Iceberg V3
<a name="working-with-apache-iceberg-v3"></a>

Apache Iceberg 第 3 版 (V3) 是 Apache Iceberg 資料表格式規格的最新版本，引入了進階功能，可建置 PB 級資料湖，以改善效能並減少營運開銷。V3 解決 V2 常見的效能瓶頸，特別是在批次更新和合規刪除方面。

AWS 支援 Apache Iceberg 第 3 版 (V3) 規格中定義的刪除向量和資料列歷程。這些功能適用於 [Amazon EMR 7.12](https://docs.aws.amazon.com/prescriptive-guidance/latest/apache-iceberg-on-aws/iceberg-emr.html) 上的 Apache Spark、[AWS Glue ETL](https://docs.aws.amazon.com/prescriptive-guidance/latest/apache-iceberg-on-aws/iceberg-glue.html)、[Amazon SageMaker Unified Studio 筆記本](https://docs.aws.amazon.com/next-generation-sagemaker/)，以及 [AWS Glue Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/catalog-and-crawler.html) 中的 Apache Iceberg 資料表，包括 [Amazon S3 資料表](https://aws.amazon.com/s3/features/tables/)。

## V3 中的主要功能
<a name="key-features-v3"></a>

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

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

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

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

**重要**  
V3 是單向升級。一旦資料表從 V2 升級至 V3，就無法透過標準操作降級回 V2。

## V3 入門
<a name="getting-started-v3"></a>

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

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

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

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

若要建立新的 Iceberg V3 資料表，請將 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'  
)
```

#### 將 V2 資料表升級至 V3
<a name="upgrading-v2-to-v3"></a>

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

**使用 Spark SQL：**

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

**重要**  
V3 是單向升級。一旦資料表從 V2 升級至 V3，就無法透過標準操作降級回 V2。

**升級期間會發生什麼情況：**
+ 會以原子方式建立新的中繼資料快照
+ 重複使用現有的 Parquet 資料檔案
+ 資料列線性欄位會新增至資料表中繼資料
+ 下一個壓縮動作會移除舊的 V2 刪除檔案
+ 新修改將使用 V3 的刪除向量檔案
+ 升級不會執行資料列範圍變更追蹤記錄的歷史回填

### 啟用刪除向量
<a name="enabling-deletion-vectors"></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="leveraging-row-lineage"></a>

V3 會自動新增資料列中繼資料欄位以追蹤變更。

**使用 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
```

\$1row\$1id 欄位可唯一識別每一列，而 \$1last\$1updated\$1sequence\$1number 則會追蹤列上次修改的時間。使用這些欄位來：
+ 識別變更的資料列以進行增量處理
+ 追蹤資料譜系的合規性
+ 最佳化 CDC 管道
+ 僅處理變更以降低運算成本

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

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

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

### 最佳化寫入效能
<a name="optimizing-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="optimizing-read-performance"></a>
+ 利用資料列線性進行增量處理
+ 使用時間歷程來存取歷史資料，無需複製
+ 啟用統計資料收集，以便更好地規劃查詢

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

從 V2 遷移至 V3 時：
+ 先在非生產環境中測試 - 驗證升級程序和效能
+ 在低活動期間升級 - 將對並行操作的影響降至最低
+ 監控初始效能 - 升級後追蹤指標
+ 執行壓縮 - 升級後合併刪除檔案
+ 更新文件 - 反映團隊文件中的 V3 功能

## 相容性考量事項
<a name="compatibility-considerations"></a>
+ 引擎版本 - 確保所有存取資料表的引擎都支援 V3
+ 第三方工具 - 在升級之前驗證 V3 相容性
+ 備份策略 - 測試快照型復原程序
+ 監控 - 更新 V3-specific指標的監控儀表板

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

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

錯誤：「不支援 格式版本 3」  
+ 確認您的引擎版本支援 V3

  Amazon AWS 服務的 V3 支援如下所示：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonS3/latest/userguide/working-with-apache-iceberg-v3.html)
+ 檢查目錄相容性
+ 確保最新的 AWS 服務版本

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

  ```
  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
  ```

與第三方工具不相容  
+ 驗證工具支援 V3 規格
+ 考慮維護不支援工具的 V2 資料表
+ V3 支援時間表的聯絡工具廠商

### 取得說明
<a name="getting-help"></a>
+ AWS 支援：聯絡 AWS Support 了解服務特有的問題
+ Apache Iceberg 社群：Iceberg Slack
+ AWS 文件： AWS 分析文件

## 定價
<a name="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 資料表：[儲存和請求定價](https://aws.amazon.com/s3/pricing/)

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

Apache Iceberg V3 支援適用於 Amazon EMR、 AWS Glue Data Catalog、 AWS Glue ETL 和 S3 Tables 運作的所有 AWS 區域。

## 其他資源
<a name="additional-resources"></a>
+ [Apache Iceberg V3 文件](https://docs.aws.amazon.com/prescriptive-guidance/latest/apache-iceberg-on-aws/introduction.html)
+ [遷移最佳實務](https://aws.amazon.com/solutions/guidance/migrating-tabular-data-from-amazon-s3-to-s3-tables/)
+ [入門指南](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-getting-started.html)