如之前openLooKeng博客中所述,动态过滤的核心思想是依靠join条件以及build侧表读出的数据,运行时生成动态过滤条件(dynamic filters),应用到probe侧表的table scan阶段,从而减少参与join操作的数据量,有效地减少IO读取与网络传输。
动态过滤优化方法
-
partial filters的构建
-
partial filters合并
-
partial filters以及merged filters的传输
-
merged filters应用
动态过滤特性系统架构如下图所示,总体架构来看,在进行join处理时,对物理执行计划进行改写,添加DynamicFilterSourceOperator,进行join时build侧表的数据收集之后,将收集到的partial filters包装成bloomfilter发送给分布式缓存hezelcast。与此同时,构建DynamicFilterService,对收集到的partial filters进行合并。在合并完成之后,将生成好的dynamic filter推给join时probe表,作为其额外的过滤条件,在table scan时对数据进行过滤。
通常场景下,所有的join node都会生成dynamic filter,然后依靠优化器规则PredicatePushDown将生成的dynamic filter下推给TableScanNode。然而,默认的动态过滤生成与应