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

时间序列分析函数

在 ClickHouse 中,时间序列分析可以使用标准 SQL 聚合和窗口函数进行。 在处理时间序列数据时,您通常会遇到三种主要类型的指标:

  • 持续单调增加的计数器指标(如页面浏览量或总事件数)
  • 表示时点测量值的测量指标,这些值可以上升或下降(如 CPU 使用率或温度)
  • 采样观察值并将其计入桶中的直方图(如请求持续时间或响应大小)

这些指标的常见分析模式包括比较不同时期之间的值、计算累积总额、确定变化率和分析分布。 所有这些都可以通过聚合、窗口函数(如 sum() OVER)和专用函数(如 histogram())的组合来实现。

逐期变化分析

在分析时间序列数据时,我们常常需要了解值在不同时间段之间如何变化。 这对测量指标和计数器指标都是至关重要的。 lagInFrame 窗口函数可以让我们访问上一个周期的值,以计算这些变化。

以下查询通过计算“奇怪的阿尔”扬科维奇 Wikipedia 页面每日视图的日变化来演示这一点。 趋势列显示与前一天相比,流量是增加(正值)还是减少(负值),帮助识别活动中的异常高峰或下降。

累计值

计数器指标自然随时间累积。 为了分析这种累积增长,我们可以使用窗口函数计算运行总额。

以下查询通过使用 sum() OVER 子句创建运行总额,而 bar() 函数提供增长的可视化表示。

比率计算

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

直方图

时间序列数据的一个流行用例是根据追踪事件构建直方图。 假设我们想了解根据总点击数对页面的分布,仅包含超过 10,000 次点击的页面。 我们可以使用 histogram() 函数基于箱的数量自动生成自适应直方图:

然后我们可以使用 arrayJoin() 来处理数据,并使用 bar() 来可视化它: