我有一个问题限制了我很多。我们正在尝试通过分组时间对我们的数据进行采样。我们有数百万个点,想要在给定的时间间隔内获取每个第 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 的倍数。
如果我的涌入问题没有解决方案,是否可以使用替代数据库来完成此任务?此示例中的数据是统一且均匀分布的,但情况并非总是如此。通常它会随机分布(几秒到几分钟)。