本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Iceberg 表格格式规范版本 3
Apache Iceberg 表格式规范的最新版本是版本 3。此版本引入了用于构建 PB 级数据湖的高级功能,提高了性能并减少了运营开销。它解决了版本 2 中遇到的常见性能瓶颈,尤其是在批量更新和合规性删除操作方面。
AWS 为 Iceberg 版本 3 规范中定义的删除向量和行谱系提供支持。Apache Spark 在以下 AWS 服务版本中提供了这些功能。
| AWS 服务 | 版本 3 支持 |
|---|---|
|
亚马逊 EMR 版本 7.12 及更高版本 |
|
|
是 |
|
|
AWS Glue: I ceberg REST API,表格维护 |
是 |
|
是 |
|
|
亚马逊 S3 表:I ceberg REST API,表格维护 |
是 |
|
否 |
版本 3 中的主要功能
删除向量将版本 2 中使用的位置删除文件替换为存储为 Puffin 文件的高效二进制格式。这消除了随机批量更新和《通用数据保护条例》(GDPR) 合规删除带来的写入放大,并显著降低了维护新数据的开销。处理高频更新的组织将看到写入性能立即得到改善,并通过减少小文件来降低存储成本。
行沿袭可在行级别实现精确的变化跟踪。您的下游系统可以逐步处理更改,从而加快数据管道并降低变更数据捕获 (CDC) 工作流程的计算成本。这种内置功能无需实现自定义变更跟踪。
版本兼容性
版本 3 保持了与版本 2 表的向后兼容性。AWS 服务同时支持版本 2 和版本 3 表,因此您可以:
-
对版本 2 和版本 3 的表运行查询。
-
无需重写数据,即可将现有版本 2 表升级到版本 3。
-
运行跨版本 2 和版本 3 快照的时空旅行查询。
-
跨表版本使用架构演变和隐藏分区。
版本 3 入门
先决条件
在使用版本 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 表
创建新表
要创建新的 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
无需重写数据,即可以原子方式将现有版本 2 表升级到版本 3。
使用 Spark SQL:
ALTER TABLE myns.existing_table SET TBLPROPERTIES ('format-version' = '3')
重要
版本 3 是单向升级。表从版本 2 升级到版本 3 后,无法通过标准操作将其降级回版本 2。
升级期间会发生什么:
-
新的元数据快照是以原子方式创建的。
-
现有的 Parquet 数据文件可以重复使用。
-
行谱系字段已添加到表元数据中。
升级后:
-
下一次压缩操作将删除旧版本 2 的删除文件。
-
新的修改将使用版本 3 的删除矢量文件。
升级不会对行系变更跟踪记录进行历史回填。
启用删除向量
要利用删除向量进行更新、删除和合并,请配置您的写入模式。
使用 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' )
这些设置可确保更新、删除和合并操作创建删除矢量文件,而不是重写整个数据文件。
使用行谱系进行变更跟踪
版本 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 的最佳实践
何时使用版本 3
在以下情况下,可以考虑升级到版本 3 或从版本 3 开始:
-
您经常执行批量更新或删除。
-
您需要满足 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 )
优化读取性能
-
使用行谱系进行增量处理。
-
使用时空旅行无需复制即可访问历史数据。
-
启用统计数据收集以更好地进行查询规划。
迁移策略
从版本 2 迁移到版本 3 时,请遵循以下最佳实践:
-
首先在非生产环境中进行测试,以验证升级过程和性能。
-
在低活动期间进行升级,以最大限度地减少对并发操作的影响。
-
监控初始性能,并在升级后跟踪指标。
-
升级后运行压缩以合并已删除的文件。
-
更新您的团队文档以反映版本 3 的功能。
兼容性注意事项
-
引擎版本-确保访问该表的所有引擎都支持版本 3。
-
第三方工具-在升级之前,请验证您的工具的版本 3 兼容性。
-
Backup 策略 — 测试基于快照的恢复程序。
-
监控-更新针对版本 3 特定指标的监控仪表板。
故障排查
常见问题
错误:“不支持格式版本 3”
-
确认您的引擎版本支持版本 3。 有关详细信息,请参阅本节开头的表格。
-
检查目录兼容性。
-
请确保您使用的是最新版本的 AWS 服务。
升级后性能下降
-
确认没有压实失败。有关更多信息,请参阅 Amazon S3 文档中的 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 支持时间表。
获取帮助
-
有关 AWS 服务特定问题,请联系AWS 支持
。 -
要从 Iceberg 社区获得帮助,请使用 Ic eberg Slack 频道
。 -
有关使用 AWS 服务 管理分析工作负载的信息,请参阅上的 Anal
ytics AWS。
定价
可用性
在 Amazon EMR AWS Glue、、 AWS Glue Data Catalog和 S3 表格运行的所有 AWS 区域
地方,都支持 Iceberg 表格式规范版本 3。有关区域可用性,请参阅AWS 服务 按地区划分