官网
概念
Apache Iceberg是一种用于大型数据分析场景的开放表格式(Table Format)。Iceberg使用一种类似于SQL表的高性能表格试,Iceberg格式表单表可以存储数十PB数据,适配Spark、Trino、PrestoDB、Flink和Hive等计算引擎提供高性能的读写和元数据管理功能,Iceberg是一种数据湖解决方案。
注意:Trino就是原来的PrestoSQL,2020年12月27日,PrestoSQL项目更名为Trino,Presto分成两大分支:PrestoDB、PrestorSQL。
Iceberg非常轻量级,可以作为lib与Spark、Flinki进行集成,Iceberg官网:https//iceberg.apache.org/
Iceberg。具备以下特点:
- Iceberg支持实时/批量数据写入和读取,支持Spark/Flink计算引擎。
- Iceberg支持事务ACID,支持添加、删除、更新数据。
- 不绑定任何底层存储,支持Parquet、ORC、Avro格式兼容行存储和列存储。
- Iceberg支持隐藏分区和分区变更,方便业务进行数据分区策略。
- Iceberg.支持快照数据重复查询,具备版本回滚功能。
- Iceberg扫描计划很快,读取表或者查询文件可以不需要分布式SQL引擎。
- Iceberg通过表元数据来对查询进行高效过滤。
- 基于乐观锁的并发支持,提供多线程并发写入能力并保证数据线性一致。
Iceberg特点
- Iceberg是一种数据湖解決方案;
- Iceberg格式表单表可以存储数十PB数据;
- 支持实时/批量数据写入和读取,支持Spark/Flink计算引擎;
- 支持SQL查询,支持添加、删除、更新数据;
表格格式 Table Format
Table Format-表格式可以理解为元数据及数据文件的一种组织方式
Iceberg数据存储格式
Iceberg术语
- data files(数据文件): 数据文件是Apache Iceberg表真实存储数据的文件,一般是在表的数据存储目录的data目录下,如果我们的文件格式选择的是parquet,那么文件是以".parquet'"结尾,例如: 00000-0-r0ot202112121926028036d31b-9598-4e30-8e67-ce6c39f034da-job1639237002345_0025-00001.parquet就是一个数据文件。
Iceberg每次更新会产生多个数据文件(data files)。
- Snapshot(表快照): 快照代表一张表在某个时刻的状态。每个快照里面会列出表在某个时刻的所有data files列表。data files是存储在不同的manifest files.里面,manifest files是存储在一个Manifest list文件里面,而一个Manifest list文件代表一个快照。
- Manifest list(清单列表): manifest list,是一个元数据文件,它列出构建表快照(Snapshot)的清单(Manifest file)。这个元数据文件中存储的是Manifest file列表,每个Manifest file占据一行。每行中存储了Manifest file的路径、其存储的数据文件(data files)的分区范围,增加了几个数文件、删除了几个数据文件等信息,这些信息可以用来在查询时提供过滤,加快速度。
- Manifest file(清单文件): Manifest file也是一个元数据文件,它列出组成快照(snapshot)的数据文件(data files)的列表信息。每行都是每个数据文件的详细描述,包括数据文件的状态、文件路径、分区信息、列级别的统计信息(比如每列的最大最小值、空值数等)、文件的大小以及文件里面数据行数等信息。其中列级别的统计信息可以在扫描表数据时过滤掉不必要的文件。
Manifest file是以avro格式进行存储的,以".avro"后缀结尾,例如:8138fce4-40f7-41d7-82a5-
922274d2abba-m0.avro.
Iceberg数据查询原理
查询最新快照数据
快照就是一个日志文件