Agg executor
next_batch
AggregationExecutorImpl
对应四种实现,每个里面都有个states 是Vec<Box<dyn AggrFunctionState>>
用来保存aggr state (比如avg 的state需要保存sum和count).
SimpleAggregationImpl
是没有group by 的,比如下面这种SQL。
select count(*) from table
SimpleAggregationImpl
这个没有groupby
FastHashAggregationImpl
这个只有一个group by expr
SlowHashAggregationImpl
有多个group by expr
假设数据有四列a
,b
,c
,d
, 执行
select
exp_1(a), exp_2(b), avg(c), sum(d)
from t
group by
exp_1(a), exp_2(b)
slow hash agg中相关数据结构关系如下:
BatchStreamAggregationImpl
假定已排好序
stream agg中相关数据结构关系如下: