avgState
描述
State
组合器可以应用于 avg
函数,以生成 AggregateFunction(avg, T)
类型的中间状态,其中 T
是用于计算平均值的指定类型。
示例用法
在这个例子中,我们将看看如何使用 AggregateFunction
类型,以及 avgState
函数来聚合网站流量数据。
首先创建网站流量数据的源表:
创建一个聚合表来存储平均响应时间。请注意,avg
不能使用 SimpleAggregateFunction
类型,因为它需要一个复杂的状态(一个总和和一个计数)。因此,我们使用 AggregateFunction
类型:
创建一个增量物化视图,它将作为新数据的插入触发器,并将中间状态数据存储在上述定义的目标表中:
向源表插入一些初始数据,在磁盘上创建一个分区片段:
插入更多数据以在磁盘上创建第二个分区片段:
检查目标表 page_performance
:
请注意,avg_response_time
列的类型为 AggregateFunction(avg, UInt32)
,并存储中间状态信息。同样要注意,avg_response_time
的行数据对我们没有用处,我们看到一些奇怪的文本字符,比如 �, n, F, }
。这是终端尝试将二进制数据显示为文本的结果。原因在于 AggregateFunction
类型以一种为高效存储和计算而优化的二进制格式存储其状态,而不是为了人类的可读性。这个二进制状态包含计算平均值所需的所有信息。
为了使用它,可以使用 Merge
组合器:
现在我们看到了正确的平均值: