内容提要
Amazon S3表类数据存储服务现已支持Apache Iceberg V3全部数据类型,包括变体、纳秒时间戳、几何、地理位置和未知类型,以及删除向量和行谱系。用户可新建V3表或从V2升级,升级不可逆。V3以删除向量替代位置删除文件,提升行级操作效率,并原生支持半结构化和地理空间数据。新数据类型需Spark 4.0以上引擎,且仅支持Parquet格式。该功能已在所有支持区域推出,不额外收费。
延伸解读
升级 V3 前必须评估引擎兼容性
文章明确指出,从 V2 升级到 V3 是单向操作,Iceberg 规范不支持降级。升级前需确认所有访问该表的引擎都支持 V3。此外,新的 V3 数据类型(变体、纳秒时间戳、几何、地理位置和未知)需要基于 Apache Spark 4.0 或更高版本的引擎,例如 AWS Glue 6.0 或更高版本,或 Amazon EMR 8.1 或更高版本。若现有管线使用旧版引擎,升级后可能无法读取新类型数据。
删除向量如何提升行级操作效率
在 V2 中,行级删除会生成位置删除文件,大量小文件在压缩前会拖慢查询。V3 引入删除向量,以紧凑二进制格式替代位置删除文件。例如,从 20 亿行表中删除 5 万条记录,V3 只写入一个删除向量文件,而非数千个小文件,从而减少压缩时间和删除文件开销。S3 表类数据存储服务的自动压缩会在下一个维护周期处理这些删除向量。
新数据类型对存储格式和排序策略的限制
文章提醒,只有使用 Parquet 文件格式的表才支持新的 V3 数据类型,ORC 或 Avro 格式的表无法使用。另外,变体、几何、地理位置或纳秒时间戳类型的列不能包含在表的压缩排序顺序中。不过,当排序顺序使用其他类型的列时,包含这些列的表在排序和 Z 顺序策略下仍然可以正常压缩。规划表结构时需注意这些约束。
行谱系为增量管线提供原生支持
V3 的行谱系功能自动为每条记录添加 _row_id 和 _last_updated_sequence_number 字段。下游管线可以查询这些字段,仅返回指定序列号之后修改的行,而无需扫描整个表。例如,使用 WHERE _last_updated_sequence_number > 42 即可获取序列号 42 之后的所有更改。这有助于构建高效的增量处理作业,减少每次运行时的全表扫描开销。
Q&A
Amazon S3 表类数据存储服务现在支持哪些 Apache Iceberg V3 的新数据类型?
支持的新数据类型包括变体(variant)、纳秒时间戳、几何(geometry)、地理位置(geography)和未知(unknown)类型。
如何将现有的 Iceberg V2 表升级到 V3?升级后可以回退吗?
可以通过 ALTER TABLE ... SET TBLPROPERTIES ('format-version' = '3') 原子升级,无需重写数据。但升级是单向操作,Iceberg 规范不支持从 V3 降级到 V2,升级前需确认所有引擎支持 V3。
Iceberg V3 的删除向量相比 V2 的位置删除文件有什么优势?
删除向量用紧凑的二进制格式替代 V2 的位置删除文件,例如删除 5 万行只写入一个删除向量文件,而不是数千个小文件,从而显著减少压缩时间和删除文件开销。
使用 V3 的新数据类型需要满足哪些引擎和文件格式要求?
新数据类型需要基于 Apache Spark 4.0 或更高版本的引擎,例如 AWS Glue 6.0+ 或 Amazon EMR 8.1+。并且仅支持 Parquet 文件格式,不支持 ORC 或 Avro。
行谱系(row lineage)在增量数据处理中有什么作用?
行谱系自动为每条记录添加 _row_id 和 _last_updated_sequence_number 字段。下游管线可以查询这些字段,仅处理自上次运行以来修改的行,而无需扫描整个表。
Amazon S3 表类数据存储服务对 Iceberg V3 的收费情况如何?
Apache Iceberg V3 支持不收取额外费用,适用标准 S3 表类数据存储服务定价。该功能已在所有支持 S3 表类数据存储服务的 AWS 区域推出。