Apache Iceberg™

用于分析数据集的开放表格式。




什么是 Apache Iceberg™?


Iceberg 是一种用于海量分析表的高性能格式。Iceberg 将 SQL 表的可靠性和简洁性引入大数据领域,同时使 Spark、Trino、Flink、Presto、Hive 和 Impala 等引擎能够同时安全地处理相同的表。



富有表现力的 SQL

Iceberg 支持灵活的 SQL 命令来合并新数据、更新现有行并执行有针对性的删除操作。Iceberg 可以为了读取性能主动重写数据文件,也可以使用删除增量(delete deltas)来实现更快的更新。

MERGE INTO prod.nyc.taxis pt USING (SELECT * FROM staging.nyc.taxis) st ON pt.id = st.id WHEN NOT MATCHED THEN INSERT *; 完成!

完整的模式演进(Schema Evolution)

模式演进开箱即用。添加列不会导致“僵尸”数据复现。列可以重命名和重新排序。最重要的是,模式更改从不需要重写您的表。

ALTER TABLE taxis ALTER COLUMN trip_distance TYPE double; 完成! ALTER TABLE taxis ALTER COLUMN trip_distance AFTER fare; 完成! ALTER TABLE taxis RENAME COLUMN trip_distance TO distance; 完成!

隐藏分区(Hidden Partitioning)

Iceberg 处理了为表中行生成分区值这一繁琐且易出错的任务,并自动跳过不必要的分区和文件。快速查询无需额外的过滤器,并且可以随着数据或查询的变化更新表布局。


时间旅行与回滚

时间旅行支持使用完全相同的表快照进行可重复查询,或让用户轻松检查更改。版本回滚允许用户通过将表重置为良好状态来快速纠正问题。

SELECT count(*) FROM nyc.taxis 2,853,020 SELECT count(*) FROM nyc.taxis FOR VERSION AS OF 2188465307835585443 2,798,371 SELECT count(*) FROM nyc.taxis FOR TIMESTAMP AS OF TIMESTAMP '2022-01-01 00:00:00.000000 Z' 2,798,371

数据压缩

开箱即用支持数据压缩,您可以选择不同的重写策略(如 bin-packing 或排序)来优化文件布局和大小。

CALL system.rewrite_data_files("nyc.taxis");

主页