跳到主要内容
跳到主要内容

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 组合器:

现在我们看到了正确的平均值:

另见