Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Markdown
## 背景

在 IoTDB 中,聚合查询可以使用 `GROUP BY` 子句指定按照时间区间分段聚合。用户可以指定聚合的时间间隔和滑动步长,相关参数如下:

- 参数 1:整体的时间窗口。
- 参数 2(interval):划分时间轴的时间间隔参数(> 0)。
- 参数 3(slidingStep):滑动步长(可选,默认值与时间间隔相同)。

![img](https://user-images.githubusercontent.com/16079446/69109512-f808bc80-0ab2-11ea-9e4d-b2b2f58fb474.png)

在之前的定义中,滑动步长必须大于等于时间间隔,现在拟支持滑动步长小于时间间隔的情况。

## 设计思路

- 根据时间间隔和滑动步长将整体的时间窗口划分成若干**不重叠的预聚合窗口**。
- 先对每个预聚合窗口内的数据进行聚合(调用之前的接口即可),将这些预聚合值维护在一个队列中并实时更新聚合结果。
- 当聚合窗口内的所有预聚合窗口的聚合值都计算完毕时,此时得到的聚合结果即该聚合窗口的聚合结果。
- 聚合窗口移动时,同时更新队列,将不在聚合窗口内的预聚合值出队。

## 算法过程

### 预聚合窗口划分

- **若 interval < slidingStep,预聚合窗口等于聚合窗口。

**  
- **若 interval >= slidingStep,预聚合窗口由各个聚合窗口的边界划分而成。**

例:整体时间窗口为 [0, 32),数据如下,灰色单元格表示对应时间戳没有数据。

...