更强大、更灵活、更全面丨一文搞懂DolphinDB窗口计算

2022-03-28 00:00:00 数据 函数 窗口 计算 步长

在时序数据的处理中经常需要使用窗口计算。在DolphinDB中,窗口计算不仅仅应用于全量的历史数据计算,还可以应用于增量的流计算。窗口函数既可应用于SQL(处理表中的列),也可应用于面板数据(处理矩阵中的列)。DolphinDB对于窗口计算进行了精心优化,与其它系统相比,拥有显著的性能优势。除此之外,DolphinDB的窗口函数使用上更加灵活,不仅内置的或自定义的vector函数都可用于窗口计算,而且可以多个函数嵌套使用。

本篇将系统的介绍DolphinDB的窗口计算,从概念划分、应用场景、指标计算等角度,帮助用户快速掌握和运用DolphinDB强大的窗口计算功能。

本篇所有代码支持DolphinDB 1.30.15,2.00.3及以上版本。

1.30.7,2.00.0以上版本支持绝大部分代码,细节部分会在小节内部详细说明。

1. 窗口的概念及分类

DolphinDB内有四种窗口,分别是:滚动窗口、滑动窗口、累计窗口和不定长窗口(包括会话窗口和segment window)。

在DolphinDB中,窗口的度量标准有两种:数据行数和时间。 为了方便理解,可以参考下图:

本章节将介绍各个窗口类型的概念,具体的应用实例会在第2-4章节详细介绍。

1.1 滚动窗口

滚动窗口将每个数据分配到一个指定大小的窗口中。通常滚动窗口大小固定,且相邻两个窗口没有重复的元素。

滚动窗口根据度量标准的不同可以分为2种:

  • 以行数划分窗口

图1-1-1 指定窗口大小为3行记录,横坐标以时间为单位。从图上可以看出,按每三行记录划分为了一个窗口,窗口之间的元素没有重叠。

  • 以时间划分窗口

图1-1-2 指定窗口大小为3个时间单位,横坐标以时间为单位。与以行数划分窗口不同,按时间划分的窗口内记录数是不固定的。从两个图中可以看出,同一数据按不同单位类型划分窗口的结果是不同的。

1.2 滑动窗口

滑动窗口的模式是:一定长度的窗口,根据步长,进行滑动。与滚动窗口不同,滑动窗口相邻两个窗口可能包括重复的元素。滑动窗口根据步长和窗口采用不同的度量标准,可以分成以下4种:

  • 步长为1行, 窗口为n行

图1-2-1 指定窗口大小为6行记录,窗口每次向后滑动1行记录。

  • 步长为1行,窗口为指定时间

图1-2-2 指定窗口大小为3个时间单位,窗口以右边界为基准进行前向计算,窗口每次向后滑动1行记录。

  • 步长为时间,窗口为n个步长时间

图1-2-3 指定窗口大小为4个时间单位,每次向后滑动2个时间单位。

  • 步长为n行,窗口为m行

图1-2-4 指定窗口大小为5行记录,窗口每次向后滑动3行记录。

1.3 累计窗口

累计窗口,即窗口的起始边界固定,结束边界累计右移。根据数据的增加或时间的增长,窗口的大小会变大。 累计窗口根据度量标准的不同可以分为2种:

  • 步长为指定时间单位

图1-3-1 窗口右边界每次右移2个时间单位,窗口大小累计增加。

  • 步长为1行

图1-3-2 窗口右边界每次右移1行,窗口大小累计增加。

1.4 不定长窗口

1.4.1 会话窗口

会话窗口是根据指定时间长度(session gap)切分窗口:若某条数据之后指定时间长度内无数据进入,则该条数据为一个窗口的终点,之后条新数据为另一个窗口的起点。 会话窗口的窗口大小可变,窗口的度量方式为时间。

1.4.2 segment窗口

segment窗口是根据给定的数据来切分窗口,连续的相同元素为一个窗口。窗口大小可变,窗口的度量方式为行。

2. SQL中的窗口计算以及窗口连接计算

SQL中的窗口计算一般涉及滚动窗口,滑动窗口,累计窗口以及segment窗口。DolphinDB中也有涉及窗口计算的window join窗口连接。本章将对上述几个窗口计算一一介绍。

2.1 SQL中的窗口计算

2.1.1 滚动窗口

2.1.1.1 时间维度的滚动窗口

在SQL中,可使用intervalbardailyAlignedBar等函数配合group by语句实现滚动窗口的聚合计算。

bar函数为例,下面的例子是将10:00:00到10:05:59每秒更新的数据,每2分钟统计一次交易量之和:

t=table(2021.11.01T10:00:00..2021.11.01T10:05:59 as time, 1..360 as volume)
select sum(volume) from t group by bar(time, 2m)

# output

bar_time            sum_volume
------------------- ----------
2021.11.01T10:00:00 7260      
2021.11.01T10:02:00 21660     
2021.11.01T10:04:00 36060 

相关文章