AWS 宣布,Amazon S3 Tables 服务现已支持 Apache Iceberg V3 规范中的所有数据类型,从而可以创建新的 V3 版本表,或升级现有的基于 V2 构建的表。此次更新包括删除向量(Deletion Vectors)、行序列(Row Lineage),以及 variant、nanosecond timestamp、geometry、geography 和 unknown 数据类型。
这些能力面向管理数据湖中大型表的分析团队。与其将半结构化数据、地理坐标或超高精度时间戳表示为字符串或整数,不如在 Iceberg 表中以原生类型存储,同时继续使用 Amazon S3 上的 Parquet 文件。
实际会发生什么变化?
删除向量用压缩的二进制表示取代 Iceberg V2 中使用的定位删除文件。根据 AWS 展示的示例,从包含 20 亿行的表中删除 5 万条记录时,可以生成一个删除向量文件,而不是数千个小文件,从而减少文件负担和后续压缩时间。
行序列会自动添加 _row_id 和 _last_updated_sequence_number 两个字段。后续处理流水线可以使用序列号提取自上一个检查点以来发生变化的行,而不必在每次运行时扫描整个表。
variant 类型以列式格式存储半结构化数据,使查询引擎能够直接读取所需字段,并利用统计信息减少输入输出操作,而不是在每次查询时解析 JSON 文本。Iceberg V3 还为地理空间数据和纳秒精度时间戳提供原生数据类型。
从 Iceberg V2 升级
可以通过将 format-version 属性更改为 3,以原子方式升级现有表,无需重写数据。在环境完成 V3 支持之前,V2 读取器仍可继续处理已升级的表;同时,S3 Tables 会在下一次压缩周期中移除旧的删除文件,并在之后首次修改数据时开始初始化行序列数据。
但此次升级是单向的;Apache Iceberg 规范不支持从 V3 回退到 V2。因此,必须事先确认访问该表的所有引擎都支持新版本。
兼容性和限制
新的数据类型要求使用基于 Apache Spark 4.0 或更高版本构建的引擎,例如 AWS Glue 6.0 或更高版本,或 Amazon EMR 8.1 或更高版本。此外,这些类型仅限于使用 Parquet 的表,不能与 ORC 或 Avro 一起使用。
variant、geometry、geography 列或纳秒精度时间戳不能用于表的压缩排序,但包含这些类型的表仍可进行压缩,只要其排序依赖于其他类型的列。S3 Tables 将继续自动管理压缩和维护,并支持通过 Amazon S3 控制台、AWS CLI 或任何支持 Iceberg REST Catalog 接口的引擎创建表。
为什么这项更新很重要?
此次更新为数据团队在处理大规模删除、不规则数据和增量更新时提供了更少依赖自定义转换的路径。不过,实际收益取决于企业查询和写入引擎的准备情况;升级并不意味着所有工具都能立即兼容,而且使用新类型会限制存储格式,并要求 Spark 及相关服务采用特定版本。
Apache Iceberg V3 支持现已在所有支持 S3 Tables 的 AWS 区域提供,更新不收取额外专属费用,同时继续适用 S3 Tables 的常规价格。