

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 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 支持 | 
| --- | --- | 
|  [适用于 Apache Spark 的亚马逊 EMR](iceberg-emr.md)  |  亚马逊 EMR 版本 7.12 及更高版本  | 
|  [AWS Glue](iceberg-glue.md)  |  是  | 
|  AWS Glue: I [ceberg REST API](https://docs.aws.amazon.com/glue/latest/dg/connect-glu-iceberg-rest.html)，表格维护  |  是  | 
|  [亚马逊 SageMaker 统一工作室笔记本电脑](https://docs.aws.amazon.com/next-generation-sagemaker/)  |  是  | 
|  亚马逊 S3 表格：I [ceberg 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)  |  是  | 
|  [亚马逊 Athena（Trino）](https://docs.aws.amazon.com/athena/latest/ug/engine-versions-reference-0003.html)  |  否  | 

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

**删除向量**将版本 2 中使用的位置删除文件替换为存储为 Puffin 文件的高效二进制格式。这消除了随机批量更新和《通用数据保护条例》(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 分析服务（亚马逊 EMR、 AWS Glue Amazon SageMaker Unified Studio 笔记本电脑或 Amazon S3 表）。
+ 用于存储表数据和元数据的 S3 存储桶。
+ 用于开始使用 Amazon S3 表的表存储桶，或者如果您正在构建自己的 Iceberg 基础架构，则是通用的 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 兼容性。
+ Backup 策略 — 测试基于快照的恢复程序。
+ 监控-更新针对版本 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)。
+ 确认删除向量已启用。应设置以下属性：

  ```
  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 社区获得帮助，请使用 Ic [eberg Slack 频道](https://iceberg.apache.org/community/)。
+ 有关使用 AWS 服务 管理分析工作负载的信息，请参阅[上的 Anal](https://aws.amazon.com/big-data/datalakes-and-analytics/) ytics AWS。

## 定价
<a name="v3-pricing"></a>
+ [亚马逊 EMR 计算和存储定价](https://aws.amazon.com/emr/pricing/)
+ [亚马逊 SageMaker定价](https://aws.amazon.com/sagemaker/pricing/)
+ [AWS Glue 任务运行和数据目录定价](https://aws.amazon.com/glue/pricing/)
+ [S3 表存储和请求定价](https://aws.amazon.com/s3/pricing/)

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

在 Amazon EMR AWS Glue、、 AWS Glue Data Catalog和 S3 表格运行的所有 AWS 区域 地方，都支持 Iceberg 表格式规范版本 3。有关区域可用性，请参阅[按区域划分的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)