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

Grouping influx data per day using flux

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

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) 

生成:

_table _value _start _stop _time
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)

我明白了

_table _value _start _stop _time
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 获得如下每天的条目:

您只需要在 aggregateWindow window 函数中 change/add timeSrc 参数。默认情况下,Flux 将使用 _stop 作为参数值,创建“高”边界 windows.

为了更好地说明,让我们让您的示例更简单一些,因为当天 end/start 的时间不准确:例如,如果现在是 22:20 系统时间,我将发出范围为“的查询” -1h" 并按 1h 分组,Flux 将创建两个翻滚时间 windows:21:00-22:00 和 22:00-23:00。事实上,Flux 检测它的范围并将那些全局时间 windows 截断为 21:20-22:00 和 22:00-22:20.

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

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