表
性能
登录后可跨设备保存划线和私人笔记登录
性能
- Iceberg 面向超大表设计,已在生产环境中使用,其中单张表可包含数十 PB 的数据。
- 即使是数百 PB 级别的表,也可以从单个节点读取,无需依赖分布式 SQL 引擎来筛选表元数据。
扫描规划
扫描规划是指查找查询所需表文件的过程。
Iceberg 表的规划可以在单个节点上完成,因为除了可以过滤掉不包含匹配数据的数据文件外,Iceberg 的元数据还可用于裁剪掉不需要的元数据文件。
从单个节点进行快速扫描规划可带来以下优势:
- 降低 SQL 查询延迟——通过省去分布式扫描来规划分布式扫描
- 支持任意客户端访问——独立进程可以直接从 Iceberg 表读取数据
元数据过滤
Iceberg 使用两级元数据来跟踪快照中的文件。
- manifest 文件存储数据文件列表,以及每个数据文件的分区数据和列级统计信息
- manifest 列表存储快照中所有 manifest 的列表,以及每个分区字段的取值范围
为了实现快速扫描规划,Iceberg 首先利用 manifest 列表中的分区取值范围来过滤 manifest,然后读取每个 manifest 以获取数据文件。通过这种机制,manifest 列表充当了 manifest 文件的索引,从而无需读取全部 manifest 即可完成规划。
除了分区取值范围,manifest 列表还记录了每个 manifest 中新增或删除的文件数量,以加快快照过期等操作的速度。
数据过滤
manifest 文件为每个数据文件包含一组分区数据和列级统计信息。
在规划过程中,查询谓词会被自动转换为针对分区数据的谓词,并首先用于过滤数据文件。接下来,利用列级的值计数、空值计数、下界和上界来排除无法匹配查询谓词的文件。
通过在规划阶段使用上界和下界来过滤数据文件,Iceberg 借助聚簇排列的数据在无需运行任务的情况下排除分片。在某些场景下,这可带来10 倍的性能提升。
评论
登录后参与评论
正在加载评论…
KnowForge