写点什么

iceberg 查询加速原理

用户头像
聚变
关注
发布于: 2021 年 04 月 15 日


扫描计划(Scan planning)

扫描计划是在表中查找查询所需文件的过程。

Iceberg 表中的计划适合单个节点,因为 Iceberg 的元数据除了过滤不包含匹配数据的数据文件外,还可以用于修剪不需要的元数据文件。

从单个节点进行快速扫描计划可实现:

  • 降低延迟的 SQL 查询–通过消除分布式扫描来计划分布式扫描

  • 从任何客户端访问–独立进程可以直接从 Iceberg 表读取数据

元数据过滤


Iceberg 使用两个级别的元数据来跟踪快照中的文件

  • manifest 文件:存储数据文件(data file list)列表,以及每个数据文件的分区数据和列级统计信息

  • manifest list 文件:存储快照(snapshot)的 manifest 的列条以及每个分区字段的值范围


为于快速扫描计划,Iceberg 首先使用 manifest list 中的分区值范围过滤清单。 然后,它读取每个清单以获取数据文件。 使用此方案,manifest list 可作为清单文件的索引,从而可以在不读取所有清单的情况下进行计划。


除了分区值范围外,manifest list 还存储清单中添加或删除的文件数,以加快快照过期之类的操作。


数据过滤


清单文件(Manifest files)包括分区数据元组和每个数据文件的列级统计信息:


在计划期间,查询谓词会自动转换为分区数据上的谓词,并首先应用于过滤数据文件。

接下来,使用列级值计数,空计数,下限和上限来消除与查询谓词不匹配的文件。


通过在计划时使用上限和下限来过滤数据文件,Iceberg 使用群集数据来消除拆分而无需运行任务。 在某些情况下,性能提高了 10 倍。

用户头像

聚变

关注

还未添加个人签名 2017.10.18 加入

还未添加个人简介

评论

发布
暂无评论
iceberg查询加速原理