使用 Apache Iceberg V3 - Amazon Simple Storage Service

使用 Apache Iceberg V3

Apache Iceberg 版本 3(V3)是 Apache Iceberg 表格式规范的最新版本,此版本引入了高级功能用于构建 PB 级数据湖,同时改善性能并降低运营开销。V3 解决了 V2 中会遇到的常见性能瓶颈,尤其是在批量更新和合规删除方面。

AWS 支持删除向量和行谱系,如 Apache Iceberg 版本 3(V3)规范中定义。这些功能可在下列服务中使用:Amazon EMR 7.12 上的 Apache Spark;AWS Glue ETLAmazon SageMaker 融通式合作开发工作室笔记本;以及 AWS Glue Data Catalog 中的 Apache Iceberg 表(包括 Amazon S3 表类数据存储服务)。

V3 中的主要功能

删除向量

将 V2 中的位置删除文件替换成存储为 Puffin 文件的高效二进制格式。这消除了随机批量更新和 GDPR 合规删除带来的写入放大,从而大幅降低维护刷新数据的开销。如果组织在处理高频率更新,可以立即体验到写入性能改进,并可以通过减少小文件来降低存储成本。

行谱系

实现了行级别的精确变更跟踪。您的下游系统可以通过递增方式处理更改,从而加快数据管道并降低更改数据捕获(CDC)工作流的计算成本。此内置功能消除了实施自定义变更跟踪的需求。

版本兼容性

V3 保持与 V2 表的向后兼容性。AWS 服务同时支持 V2 和 V3 表,让您可以:

  • 在 V2 和 V3 表上运行查询

  • 无需数据重写即可将现有 V2 表升级到 V3

  • 执行跨 V2 和 V3 快照的时间旅行查询

  • 跨表版本使用架构演变和隐藏分区

重要

V3 是一个单向升级。表从 V2 升级到 V3 后,就无法通过标准操作将其降级回 V2。

开始使用 V3

先决条件

使用 V3 表之前,请确保您具有:

  • AWS 账户和相应的 IAM 权限

  • 一项或多项 AWS 分析服务(EMR、Glue、Amazon SageMaker 融通式合作开发工作室笔记本或 S3 表类数据存储服务)的访问权限

  • S3 存储桶,用于存储表数据和元数据

  • 表存储桶,用于开始使用 S3 表类数据存储服务,如果您在构建自己的 Iceberg 基础设施,则是 S3 通用存储桶

  • 已配置 AWS Glue 目录

创建 V3 表

创建新 V3 表

要创建新 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

您可以自动将现有 V2 表升级到 V3 而无需重写数据。

使用 Spark SQL:

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

V3 是一个单向升级。表从 V2 升级到 V3 后,就无法通过标准操作将其降级回 V2。

升级期间发生的操作:

  • 以原子方式创建新的元数据快照

  • 重复使用现有的 Parquet 数据文件

  • 在表元数据中添加了行谱系字段

  • 下次压缩时将移除旧的 V2 删除文件

  • 新修改将使用 V3 的删除向量文件

  • 升级不会对行谱系变更跟踪记录执行历史回填

启用删除向量

要利用删除向量进行更新、删除和合并,请配置您的写入模式。

使用 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' )

这些设置可确保更新、删除和合并操作创建删除向量文件,而不是重写整个数据文件。

利用行谱系进行变更跟踪

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

_row_id 字段唯一地标识每行,而 _last_updated_sequence_number 则跟踪上次修改该行的时间。使用这些字段可以:

  • 标识已更改的行来进行增量处理

  • 跟踪数据血统以确保合规性

  • 优化 CDC 管道

  • 仅处理更改过的内容,从而降低计算成本

V3 最佳实践

何时使用 V3

在以下情况下,可以考虑升级到 V3 或直接开始使用 V3:

  • 您经常执行批量更新或删除

  • 您需要满足 GDPR 或合规删除要求

  • 您的工作负载涉及频繁的更新插入

  • 您需要高效的 CDC 工作流

  • 您需要降低小文件的存储成本

  • 您需要更好的变更跟踪功能

优化写入性能

  • 为更新密集型工作负载启用删除向量:

    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 )

优化读取性能

  • 利用行谱系进行增量处理

  • 使用时间旅行访问历史数据而无需进行复制

  • 启用统计数据收集以更好地进行查询规划

迁移策略

从 V2 迁移到 V3:

  • 首先在非生产环境中进行测试:验证升级过程和性能

  • 在活动较少的时间段进行升级:尽可能减少对并发操作的影响

  • 监控初始性能:在升级后跟踪指标

  • 运行压缩:升级后合并删除文件

  • 更新文档:在团队文档中记录 V3 功能

兼容性注意事项

  • 引擎版本:确保所有访问表的引擎都支持 V3

  • 第三方工具:升级前验证 V3 兼容性

  • 备份策略:测试基于快照的恢复程序

  • 监控:更新 V3 特定指标的监控控制面板

问题排查

常见问题

错误:“不支持 format-version 3”
  • 验证您的引擎版本是否支持 V3

    V3 对 AWS 服务的支持如下:

    服务 V3 支持
    EMR Spark 发行版 7.12+
    AWS Glue ETL
    Amazon SageMaker 融通式合作开发工作室笔记本
    AWS Glue:Iceberg REST API,表维护
    Amazon S3 表类数据存储服务:Iceberg REST API、表维护
    Amazon Athena(Trino)
  • 检查目录兼容性

  • 确保 AWS 服务版本为最新

升级后的性能下降
  • 确认没有压缩故障。有关更多详细信息,请参阅 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
与第三方工具不兼容
  • 验证工具是否支持 V3 规范

  • 考虑为不支持的工具维护 V2 表

  • 请联系工具供应商来了解 V3 支持时间表

获取帮助

  • AWS Support:有关特定服务的问题,请联系 AWS Support

  • Apache Iceberg 社区:Iceberg Slack

  • AWS 文档:AWS 分析文档

定价

可用性

所有提供 Amazon EMR、AWS Glue Data Catalog、AWS Glue ETL 和 S3 表类数据存储服务的 AWS 区域均支持 Apache Iceberg V3。

其他资源