InfluxDB“按时间分组”移动时间

Fir*_*Dib 5 database sample time-series influxdb

我有一个问题,这限制了我很多。我们正在尝试通过对时间进行分组来对我们的数据进行采样。我们有数百万个点,并希望在给定的间隔内获取每第 N 个点。我们已经实施了一个解决方案,该解决方案计算此间隔中的时间差,然后根据它进行分组以接收正确的点数。

SELECT last(value) as value FROM measurement WHERE time >= '...' AND time <= '...' GROUP BY time(calculated_time) fill(none)

返回的点数似乎是正确的,但日期不正确。

查看以下结果:

无采样

> SELECT value FROM "measurement" WHERE time >= '2016-01-01T00:00:00Z' AND time <= '2017-01-01T00:00:00Z' LIMIT 5;
name: measurement
time                 value
----                 -----
2016-01-01T00:00:00Z 61.111
2016-01-01T01:00:00Z 183.673
2016-01-01T02:00:00Z 200
2016-01-01T03:00:00Z 66.667
2016-01-01T04:00:00Z 97.959
Run Code Online (Sandbox Code Playgroud)

带采样

> SELECT last(value) as value FROM "measurement" WHERE time >= '2016-01-01T00:00:00Z' AND time <= '2017-01-01T00:00:00Z' GROUP BY time(23m) fill(none) LIMIT 5;
name: measurement
time                 value
----                 -----
2015-12-31T23:44:00Z 61.111
2016-01-01T00:53:00Z 183.673
2016-01-01T01:39:00Z 200
2016-01-01T02:48:00Z 66.667
2016-01-01T03:57:00Z 97.959
Run Code Online (Sandbox Code Playgroud)

无论聚合函数中使用的时间如何,我都希望返回的数据具有与数据库中一样的正确时间戳。相反,返回的时间似乎是聚合时间的倍数。也就是说,如果我的聚合是GROUP BY time(7m)那么点似乎是 7 的倍数。


如果我的涌入问题没有解决方案,是否可以使用替代数据库来完成此任务?本示例中的数据是均匀分布的,但情况并非总是如此。通常它会随机分布(几秒到几分钟)。

Mat*_*oni 0

对于任何仍然对 InfluxDB 2.0 感兴趣的人来说,引入了一种新的查询语言:Flux。

对于 Flux,有一个sample函数可以实现此解决方案(每 10 个元素进行采样):

from(bucket: "my-bucket")
  |> range(start: 2016-01-01T00:00:00Z, stop: 2017-01-01T00:00:00Z)
  |> filter(fn: (r) => r._measurement == "measurement")
  |> filter(fn: (r) => r._field == "value")
  |> sample(n: 10)
  |> yield()
Run Code Online (Sandbox Code Playgroud)