时间序列分析函数
在 ClickHouse 中,时间序列分析可以使用标准 SQL 聚合和窗口函数来执行。 在处理时间序列数据时,您通常会遇到三种主要类型的指标:
- 随时间单调增加的计数器指标(如页面浏览量或总事件数)
- 表示瞬时测量且可上下波动的计量指标(如 CPU 使用率或温度)
- 采样观测值并将其计数到桶中的直方图(如请求时长或响应大小)
这些指标的常见分析模式包括比较周期之间的值、计算累积总数、确定变化率和分析分布。
这些都可以通过聚合、窗口函数如 sum() OVER
的组合以及像 histogram()
这样的专用函数来实现。
周期间变化
在分析时间序列数据时,我们通常需要了解值在时间段之间是如何变化的。
这对计量和计数器指标都是必不可少的。
lagInFrame
窗口函数使我们能够访问前一个时间段的值,以计算这些变化。
以下查询通过计算 “Weird Al” Yankovic 的维基百科页面的日变化量来演示这一点。 趋势列显示与前一天相比,流量是增加(正值)还是减少(负值),帮助识别活动中的异常激增或下降。
累积值
计数器指标自然随时间累积。 要分析这种累积增长,我们可以使用窗口函数计算运行总数。
以下查询通过使用 sum() OVER
子句来创建运行总数,而 bar()
函数提供了增长的可视化表示。
速率计算
在分析时间序列数据时,了解单位时间内事件的发生率往往很有用。 此查询通过将每小时总数除以每小时的秒数(3600)来计算每秒的页面浏览量。 可视化条形图帮助识别活动的高峰时段。
直方图
时间序列数据的一个流行用例是根据跟踪事件构建直方图。
假设我们想了解基于总点击量的多个页面的分布情况,仅包括点击量超过 10,000 的页面。
我们可以使用 histogram()
函数根据桶的数量自动生成自适应直方图:
然后,我们可以使用 arrayJoin()
来处理数据,并用 bar()
进行可视化: