暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

openGauss Agg算子

openGauss小助手 2021-10-18
1343

Agg算子用于执行含有聚集函数的操作,对应的代码源文件是“nodeAgg.cpp”。Agg算子支持3种策略处理:普通聚集(不分组聚集计算)、排序聚集、哈希聚集。排序聚集和哈希聚集计算都包含GROUP BY子句而不分组聚集计算则不包含。普通聚集实际可以看作分组聚集的一种特例(每个元组对应一个分组)。普通聚集与排序聚集使用agg_retrieve_direct函数获取元组,哈希聚集使用agg_retrieve函数获取元组。算子对应的主要函数如表7-28所示。

表7-28 Agg算子主要函数

主要函数说明
ExecInitAgg初始化Agg状态节点
ExecAgg迭代获取元组
ExecEndAgg清理Agg状态节点
ExecResScanAgg重置Agg状态节点

ExecInitAgg函数用于初始化Agg状态节点。主要执行流程如下。

(1) 构建AggState状态节点。
(2) 计算最大分组数(迭代阶段)。
(3) 初始化子计划节点(左子节点)。
(4) 初始化聚合函数。
(5) 初始化罗盘文件。

ExecAgg函数输出聚合元组。从子节点(子计划执行)获取元组,按照指定的属性列聚合,根据不同的聚合调用agg_retrieve或agg_retrieve_direct函数。agg_retrieve函数的执行逻辑是:首先准备数据(从子节点获取数据),然后向哈希表中填充中间计算结果。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论