Presto源碼解析(HashAggregationOperator)

1.GroupByHashAggregationBuilder

1.重要成員

        private final GroupByHash groupByHash;//包括找出group組id,添加新的gooup等
        private final List<Aggregator> aggregators;//用於存儲不同聚合類型的集合
        private final OperatorContext operatorContext;
        private final boolean partial;

2.重要方法

該方法把page中的數據按照不同的group進行分組,但是這時並沒有進行聚合,聚合操作是在getOutput方法中進行的

        private void processPage(Page page)
        {
            if (aggregators.isEmpty()) {
                groupByHash.addPage(page);
                return;
            }

            GroupByIdBlock groupIds = groupByHash.getGroupIds(page);//通過多通道(multi-channel)hash方法獲取到一個組id:主要是通過hash值來進行判斷,多通道hash計算出的組id是新的,就新建一個組,用於存儲屬於該組的數據;如果通過hash值計算出的組id是已有的組,則返回該組id

            for (Aggregator aggregator : aggregators) { //把數據歸類到不同的聚合器中,等待調用getOutput方法時進行聚合
                aggregator.processPage(groupIds, page);
            }
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章