使用 Flux 对每天的流入数据进行分组

Sta*_*ers 4 time-series influxdb

我一直在使用 Flux 查询语言解决 influxDB 中的时间分组问题。我可以用生成的数据来说明,从 2021 年 1 月 1 日到 2021 年 1 月 5 日,每天一个条目。

import "generate"
data = generate.from(
  count: 5,
  fn: (n) => n + 1,
  start: 2021-01-01T00:00:00Z,
  stop: 2021-01-06T00:00:00Z,
)

data
  |> range(start: 2021-01-01T00:00:00Z, stop: 2021-01-05T05:00:00Z) 
Run Code Online (Sandbox Code Playgroud)

生成:

_桌子 _价值 _开始 _停止 _时间
0 1 2021-01-01T00:00:00.000Z 2021-01-05T23:59:00.000Z 2021-01-01T00:00:00.000Z
0 2 2021-01-01T00:00:00.000Z 2021-01-05T23:59:00.000Z 2021-01-02T00:00:00.000Z
0 3 2021-01-01T00:00:00.000Z 2021-01-05T23:59:00.000Z 2021-01-03T00:00:00.000Z
0 4 2021-01-01T00:00:00.000Z 2021-01-05T23:59:00.000Z 2021-01-04T00:00:00.000Z
0 5 2021-01-01T00:00:00.000Z 2021-01-05T23:59:00.000Z 2021-01-05T00:00:00.000Z

现在我每天查询数据并汇总

import "generate"
data = generate.from(
count: 5,
  fn: (n) => n + 1,
  start: 2021-01-01T00:00:00Z,
  stop: 2021-01-06T00:00:00Z,
)
data
  |> range(start: 2021-01-01T00:00:00Z, stop: 2021-01-05T23:59:00Z)
  |> aggregateWindow(every: 1d, fn: sum, createEmpty: false)
Run Code Online (Sandbox Code Playgroud)

我明白了

_桌子 _价值 _开始 _停止 _时间
0 1 2021-01-01T00:00:00.000Z 2021-01-05T23:59:00.000Z 2021-01-02T00:00:00.000Z
0 2 2021-01-01T00:00:00.000Z 2021-01-05T23:59:00.000Z 2021-01-03T00:00:00.000Z
0 3 2021-01-01T00:00:00.000Z 2021-01-05T23:59:00.000Z 2021-01-04T00:00:00.000Z
0 4 2021-01-01T00:00:00.000Z 2021-01-05T23:59:00.000Z 2021-01-05T00:00:00.000Z
0 5 2021-01-01T00:00:00.000Z 2021-01-05T23:59:00.000Z 2021-01-05T23:59:00.000Z

第一次是2021-01-02T00:00:00.000Z和不是2021-01-01,最后两个条目涵盖同一天2021-01-05

如何使用 Flux 获取每天的条目如下:

  • 2021-01-01 - 1
  • 2021-01-02 - 2
  • 2021-01-03 - 3
  • 2021-01-04 - 4
  • 2021-01-05 - 5

The*_*heo 5

您只需更改/添加窗口函数timeSrc中的参数即可aggregateWindow。默认情况下,Flux 将用作_stop参数值,创建“高”绑定窗口。

让我们让您的示例变得更简单一些,为了更好地说明,时间在一天结束/开始时并不准确:例如,如果系统时间是 22:20,我会发出一个范围为“-1h”并按 1h、Flux 分组的查询将创建两个翻滚时间窗口:21:00-22:00 和 22:00-23:00。事实上,Flux 会检测其范围并将这些全局时间窗口截断为 21:20-22:00 和 22:00-22:20。

如果现在将aggregateWindow timeSrc 设置为_stop,则时间列将为22:00 和22:20。[前面提到的每个时间窗口的结束]。如果您选择“_start”,时间列将为 21:20 和 22:00。

如果您在上面的示例中想要 21:00 和 22:00,我建议将您的范围调整为:range(start: date.truncate(t: -24h, unit: 1h)这通常也更有意义,因为第一个存储桶也包含该存储桶中的所有数据。