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

问题描述 投票:0回答:1

我有一个问题限制了我很多。我们正在尝试通过分组时间对我们的数据进行采样。我们有数百万个点,想要在给定的时间间隔内获取每个第 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

带采样

> 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

我希望返回的数据具有与数据库中一样的正确时间戳,而不管聚合函数中使用的时间。相反,返回的时间似乎是聚合时间的倍数。也就是说,如果我的聚合是

GROUP BY time(7m)
那么这些点似乎是 7 的倍数。


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

database time-series sample influxdb
1个回答
0
投票

对于任何仍然对 InfluxDB 2.0 感兴趣的人,引入了一种新的查询语言: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()
© www.soinside.com 2019 - 2024. All rights reserved.