iceberg
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