动态过滤
openLooKeng动态过滤主要应用于高选择性的join场景(包含针对分区表的分区裁剪以及非分区表的行过滤)。openLooKeng动态过滤当前适用于,semi join
以及right join
场景,适用于Hive connector
,DC connector
以及Memory connector
。
openLooKeng动态过滤特性依赖于分布式缓存组件,请参考State Store章节配置。
上述属性说明如下:
dynamic-filtering-wait-time
:等待动态过滤条件生成的最长等待时间,默认值是1s。dynamic-filtering-data-type
:设置动态过滤类型,可选包含BLOOM_FILTER
以及HASHSET
,默认类型为BLOOM_FILTER
。dynamic-filtering-max-size
: 每个dynamic filter的大小上限,如果预估大小超过设定值,代价优化器不会生成对应的dynamic filter,默认值是1000000。dynamic-filtering-max-per-driver-row-count
:每个driver可以收集的数据条目上限,默认值是10000。dynamic-filtering-bloom-filter-fpp
:动态过滤使用的bloomfilter的FPP值,默认是0.1。
如果应用于Hive connector
,需要对catalog/hive.properties
如下修改:
hive.dynamic-filter-partition-filtering
:使用动态过滤条件根据分区值进行预先过滤,默认值是false。
下面的例子展示了SQL语句如何应用动态过滤条件,在执行计划中标记为dynamicFilter。 可以使用explain命令查看动态过滤是否应用,也可以在webUI中的liveplan查看当前执行是否应用动态过滤。
Inner join: