presto源码解析(function)

本文深入探讨了Presto中function的构造过程,特别是针对求平均值的操作。在function构造AggregationNode后,进一步分析了求平均值的调用栈。在partial阶段,平均值的计算涉及到对doublevalues的累加和longvalues的计数,以备最终阶段的平均值计算。在处理过程中,为了防止长度溢出,数据以特定格式存储在slice中,前8位存储总和,后8位存储总数。
摘要由CSDN通过智能技术生成

1 function构造

这里写图片描述

然后使用这些function构造一个AggregationNode
但是这些函数的具体实现在什么地方,需要进一步确认

2 求平均

2-1 求平均的调用栈

在当前操作符获取到一个page之后,会调用next操作符的addinput方法,该方法会最终调用AverageAggregations类的combine方法,把聚合器当前的状态和新的值进行combine,调用关系如下:

这里写图片描述
调用一次combine方法后,doublevalues会增加一个page包含的部分的聚合结果,如果是avg函数,会变成如下所示:
[1.1382025837990004E10, 1.1340621863930069E10, 0.0,。。。
其中的数值代表了一组的总和而不是平均值,平均值需要在final阶段进行计算
longvalues代表了一组的总的数量,用于在最后阶段进行最终的求平均计算

2-2求平均的过程

2-2-1 partial阶段

部分聚合阶段,这个阶段不计算平均值,而是记录一个分组的总和,用varchar来存储(是否是因
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值