avgState
描述
State 组合器
可以应用于 avg
函数,用于生成 AggregateFunction(avg, T) 类型的中间状态,其中
T 是指定的平均值类型。
示例用法
在这个示例中,我们将演示如何将 AggregateFunction 类型与 avgState 函数结合使用来聚合网站流量数据。
首先创建网站流量数据的源表:
创建用于存储平均响应时间的汇总表。请注意,avg 不能使用 SimpleAggregateFunction 类型,因为它需要维护更复杂的状态(求和与计数)。因此我们使用 AggregateFunction 类型:
创建一个增量物化视图,使其在有新数据插入时充当触发器,并将中间状态数据存储到前面定义的目标表中:
向源表插入一些初始数据,从而在磁盘上生成一个数据部分(part):
再写入一些数据,以在磁盘上创建第二个数据分片:
查看目标表 page_performance:
请注意,avg_response_time 列的类型是 AggregateFunction(avg, UInt32),
它存储的是中间状态信息。还要注意,avg_response_time 的行数据对我们
没有用处,并且我们会看到一些奇怪的文本字符,比如 �, n, F, }。这是终端
试图将二进制数据按文本形式显示造成的结果。造成这种情况的原因是,AggregateFunction 类型以
二进制格式存储其状态,该格式经过优化以实现高效存储和计算,而不是为了
便于人类阅读。这个二进制状态包含了计算平均值所需的全部信息。
要利用它,请使用 Merge 组合器:
现在我们得到了正确的平均值: