Contents

用途场景:

  • schema演进:
    • 增删改列,重新排序,只修改元数据而不动数据文件
    • 内部使用唯一ID代替列
  • 隐式分区:
    • 无须显式指定分区列作为条件
    • 若分区来自某字段转换,两个字段均可生效分区过滤
    • 时间格式自动转换
    • 不通过目录划分分区
  • 分区演进:只修改元数据,旧数据不变(新分区字段null代替),新数据用新分区
  • 版本管理
    • time travel
    • 版本回滚
    • 版本老化清理后,数据文件不一定删除,直至不被任何版本引用

两级元数据:

  • manifest list: 包含manifests快照列表,及其对应分区字段的取值范围
  • Manifest files: 包含data files列表、及其所属分区、列级统计信息

spark-sql –jars iceberg-spark-runtime-3.2_2.12-0.13.1.jar
–conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
–conf spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkSessionCatalog
–conf spark.sql.catalog.spark_catalog.type=hive

CREATE TABLE test.ic (id bigint, data string) USING iceberg;
INSERT INTO test.ic VALUES (1, ‘a’), (2, ‘b’), (3, ‘c’);
select * from test.ic;

MERGE INTO test.ic t USING (SELECT 1 as id,’g’ as data) u ON t.id = u.id
WHEN MATCHED THEN UPDATE SET t.data = u.data
WHEN NOT MATCHED THEN INSERT *

和delta相似,元数据存储方式为json+avro