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
组合器:
现在我们看到了正确的平均值: