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