使用 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 ETL;Amazon 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 定价
-
S3 表类数据存储服务:存储和请求定价
可用性
所有提供 Amazon EMR、AWS Glue Data Catalog、AWS Glue ETL 和 S3 表类数据存储服务的 AWS 区域均支持 Apache Iceberg V3。