Skip to main content
在 ClickHouse 中,可以使用标准 SQL 聚合和窗口函数进行时间序列分析。 处理时间序列数据时,通常会遇到三种主要的指标类型:
  • 计数器类型指标,会随时间单调递增 (例如页面浏览量或事件总数)
  • Gauge 指标,表示某一时刻的测量值,既可能上升也可能下降 (例如 CPU 使用率或温度)
  • 直方图,通过对观测值采样并按桶计数来表示其分布 (例如请求耗时或响应大小)
这些指标的常见分析方式包括比较不同时期的值、计算累计总量、确定变化速率以及分析分布。 这些都可以通过组合使用聚合、像 sum() OVER 这样的窗口函数,以及像 histogram() 这样的专用函数来实现。

环比变化

在分析时间序列数据时,我们经常需要了解不同时间周期之间的值如何变化。 这对于 Gauge 和计数器类型指标都非常重要。 lagInFrame 窗口函数可让我们访问上一周期的值,从而计算这些变化。 下面的查询通过计算 “Weird Al” Yankovic 的 Wikipedia 页面浏览量日环比变化来演示这一点。 trend 列显示与前一天相比,流量是增加了 (正值) 还是减少了 (负值) ,从而有助于识别活动中的异常峰值或下降。

累积值

计数器类型指标会随着时间自然累积。 为了分析这种累积增长,我们可以使用窗口函数来计算累计总和。 下面的查询通过使用 sum() OVER 子句来演示这一点,该子句会创建累计总和。bar() 函数则以可视化方式展示增长趋势。

速率计算

在分析时间序列数据时,了解单位时间内的事件发生速率通常很有帮助。 此查询通过将每小时总量除以一小时的秒数 (3600) ,计算出每秒页面浏览量的速率。 条形图有助于识别活动高峰时段。

直方图

时间序列数据的一个常见用途,是基于已跟踪的事件构建直方图。 假设我们想了解总点击量超过 10,000 的页面,其总点击量的分布情况。 我们可以使用 histogram() 函数,根据 bin 的数量自动生成自适应直方图:
然后,我们可以使用 arrayJoin() 对数据进行处理,并用 bar() 将其可视化:
最后修改于 2026年7月3日