使用通量对每天的流入数据进行分组
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 获得如下每天的条目:
- 2021-01-01 - 1
- 2021-01-02 - 2
- 2021-01-03 - 3
- 2021-01-04 - 4
- 2021-01-05 - 5
您只需要在 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)
这通常也比第一个桶更有意义包含该存储桶中的所有数据。
我一直在使用 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 获得如下每天的条目:
- 2021-01-01 - 1
- 2021-01-02 - 2
- 2021-01-03 - 3
- 2021-01-04 - 4
- 2021-01-05 - 5
您只需要在 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)
这通常也比第一个桶更有意义包含该存储桶中的所有数据。