Presto 动态过滤之 动态过滤条件合并

一. 前言

        本文将承接Presto 动态过滤之 动态过滤条件数据的生成_王飞活的博客-CSDN博客 继续通过走读代码来了解在Presto(OpenLookeng)中DynamicFilterService中的动态过滤数据合并功能是如何实现的。

二. 为什么要进行过滤数据合并   

       因为Build侧的数据可能是在多个worker,多个task执行的。在Presto中,动态过滤只有生成最终的结构后才能apply到connector进行过滤,因此需要等待Build侧的各个task任务都执行完,然后coordaintor进行一个合并的操作将数据聚合成BoolFilter或者HashSet,然后应用到connector。

三. 过滤数据合并流程代码走读

// 只有coordaintor会启动DynamicFilterService
binder.bind(DynamicFilterService.class).in(Scopes.SINGLETON)
    filterMergeExecutor.scheduleWithFixedDelay
        hasMergeCondition 
            // 判断是不是所有的worker都已经完成
            finishedDynamicFilterNumber == dynamicFiltersToTask.get(xxx).size()
        // 如果所有的worker都完成则执行如下的merge操作    
        mergeDynamicFilters
           stateStoreProvider.getStateStore
              // 此时获取的results就是Build侧上传的数据
              Collection<Object> results = ((StateSet) stateStore.getStateCollection
                 if (filterDataType == BLOOM_FILTER) {
                     mergedBloomFilter = mergeBloomFilters
                 } else {    
                     Set mergedSet = mergeHashSets
                 }
                 cachedDynamicFiltersForQuery.put   // 至此,动态过滤的条件便完成合并,connector 后续将会从DynamicFilterService中拿到合并完成的过滤条件,完成动态过滤操作
        removeFinishedQuery

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值