标准窗口函数
ClickHouse 特有的窗口函数
以下是 ClickHouse 特有的窗口函数:nonNegativeDerivative(metric_column, timestamp_column[, INTERVAL X UNITS])
根据timestamp_column 计算给定 metric_column 的非负导数。
INTERVAL 可省略,默认为 INTERVAL 1 SECOND。
各行的计算值如下:
- 第 1 行为
0, - 第 行为 。
语法
PARTITION BY- 定义如何将结果集划分为多个组。ORDER BY- 定义在计算 aggregate_function 时,如何对组内的行进行排序。ROWS or RANGE- 定义窗口帧的边界,aggregate_function 在窗口帧内进行计算。WINDOW- 允许多个表达式使用同一个窗口定义。
函数
row_number()- 对当前行在其分区内从 1 开始编号。first_value(x)- 返回其有序窗口帧内计算得到的第一个值。last_value(x)- 返回其有序窗口帧内计算得到的最后一个值。nth_value(x, offset)- 返回其有序窗口帧中第 n 行 (offset) 计算得到的第一个非 NULL 值。rank()- 对当前行在其分区内进行有间隔排名。dense_rank()- 对当前行在其分区内进行无间隔排名。lagInFrame(x)- 返回其有序窗口帧内当前行之前按指定物理偏移量对应行上计算得到的值。leadInFrame(x)- 返回其有序窗口帧内当前行之后偏移若干行处计算得到的值。
示例
为行编号
聚合函数
按列分区
窗口帧边界
真实场景示例
各部门的最高/总工资
累积和
移动平均 / 滑动平均 (每 3 行)
移动平均 / 滑动平均 (每 10 秒)
移动平均 / 滑动平均 (每 10 天)
Range 和 ORDER BY toDate(ts),我们构造了一个大小为 10 个单位的窗口帧;而由于使用了 toDate(ts),这里的单位就是天。