跳转到主要内容

描述

State 组合器 可应用于 avg 函数,以生成 AggregateFunction(avg, T) 类型的中间状态,其中 T 是平均值的指定类型。

示例用法

在本示例中,我们将介绍如何结合使用 AggregateFunction 类型与 avgState 函数来聚合网站流量数据。 首先为网站流量数据创建源表:
创建用于存储平均响应时间的聚合表。请注意,avg 无法使用 SimpleAggregateFunction 类型,因为它需要复杂状态 (包含求和值与计数值) 。因此,我们使用 AggregateFunction 类型:
创建一个增量materialized view,作为插入触发器处理新数据,并将中间状态数据存储到上面定义的目标表中:
向源表插入一些初始数据,在磁盘上创建一个分片:
插入更多数据以在磁盘上创建第二个分片:
检查目标表 page_performance
请注意,avg_response_time 列的类型为 AggregateFunction(avg, UInt32),存储的是中间状态信息。另外请注意,avg_response_time 的行数据对我们而言没有实际意义,显示的是诸如 \uFFFD, n, F, } 之类的乱码字符。这是终端尝试将二进制数据以文本形式呈现的结果。根本原因在于,AggregateFunction 类型以二进制格式存储其状态,该格式针对高效存储与计算进行了优化,而非为人类可读性而设计。这一二进制状态包含了计算平均值所需的全部信息。 要使用它,请使用 Merge 组合器:
现在我们可以看到正确的平均值:

另请参见

最后修改于 2026年7月2日