时间序列分析函数
在 ClickHouse 中,可以使用标准 SQL 聚合和窗口函数执行时间序列分析。
在处理时间序列数据时,您通常会遇到三种主要类型的指标:
- 单调递增的计数器指标(如页面浏览量或总事件数)
- 表示某一时刻测量值的仪表指标,可以上升或下降(如 CPU 使用率或温度)
- 采样观察值并在桶中计数的直方图(如请求持续时间或响应大小)
这些指标的常见分析模式包括比较不同时期之间的值、计算累计总和、确定变化率和分析分布。
这些都可以通过聚合的组合、诸如 sum() OVER
的窗口函数,以及诸如 histogram()
的特殊函数来实现。
按周期变化
在分析时间序列数据时,我们经常需要理解值在时间段之间的变化。
这对于仪表和计数器指标都是至关重要的。
lagInFrame
窗口函数允许我们访问前一个时间段的值,以计算这些变化。
以下查询通过计算“怪异的阿尔”扬科维奇维基百科页面的日变化情况来演示这一点。
趋势列显示与前一天相比,流量是增加(正值)还是减少(负值),有助于识别活动中的异常尖峰或下降。
累计值
计数器指标自然会随着时间的推移而累积。
为了分析这种累计增长,我们可以使用窗口函数计算运行总和。
以下查询演示了如何使用 sum() OVER
子句创建一个运行总和,而 bar()
函数提供增长的可视化表示。
速率计算
在分析时间序列数据时,了解每单位时间的事件速率通常是非常有用的。
此查询通过将每小时的总数除以一小时的秒数(3600)来计算每秒的页面浏览量。
可视化条形图有助于识别活动的高峰小时。
直方图
时间序列数据的一个流行用例是基于跟踪的事件构建直方图。
假设我们想了解根据总点击次数分布的页面数量,只包括那些点击超过 10,000 次的页面。
我们可以使用 histogram()
函数自动生成一个基于箱数的自适应直方图:
然后我们可以使用 arrayJoin()
来处理数据,并使用 bar()
来可视化它: