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);
            }
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章