iceberg 查询加速原理
扫描计划(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 倍。
评论