opengauss 之聚合算子实现代码走读

一. 前言

     本文主要通过代码走读讲述openGauss中聚合算子的实现过程。

     在openGauss中,聚合分成两种,一个是简单聚合,比如对数据进行count等操作,另外一个是Hash聚合,先要对数据进行Hash分类,再对同类的数据进行聚合,如group by聚合。

二. aggtransfn、aggcollectfn、aggfinalfn 函数

openGuass中,在注册aggregate的时候需要提供aggtransfn,aggcollectfn和aggfinalfn 函数,分别对应对于每一行输入的处理函数,多个线程的收集函数和最后的聚合参数。以avg函数为例,aggtransfn,aggcollectfn和aggfinalfn分别对应int4_avg_accum,int8_avg_collect和int8_avg函数,其作用分别是对每行输入求和,对每个线程求和和求取平均值的功能,openGuass的聚合操作过程中会回调上述的函数完成聚合计算,如下以avg的聚合函数讲述回调过程。

三. avg聚合函数的代码走读

       如下为avg函数的执行代码流程为例了解openGauss中是如何实现聚合操作的,聚合算子的入口函数为ExecAgg。

ExecAgg    // 执行聚合函数的入口
    agg_retrieve_direct
        for (;;) {         // 遍历所有的输入元组
            outerslot = fetch_input_tuple(aggstate);   // 获取当前元组
            advance_aggregates(aggstate, pergroup);    // 逐行进行聚合
       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值