最近,我们面对InfluxDB的GROUP BY时间非常烦人的问题。事实证明,如果我们尝试汇总每30天的数据,则InfluxDB会通过意外的时间段来汇总数据。
例如以下查询:
SELECT COUNT(user_id) AS result FROM measurement1 WHERE time > '2017-12-31 23:59:59' AND time < '2019-01-01 23:59:59' GROUP BY time(30d) FILL(0);
然后我们得到以下响应(以毫秒为单位的时间):
time result
---- ------
1513728000000000000 0
1516320000000000000 0
1518912000000000000 0
1521504000000000000 0
1524096000000000000 0
1526688000000000000 0
1529280000000000000 0
1531872000000000000 0
1534464000000000000 4
1537056000000000000 1
1539648000000000000 0
1542240000000000000 0
1544832000000000000 0
好吧,将纪元时间转换为正常日期后,我们发现返回的时间间隔是20/12 / 17、19 / 01/18到15/12/18(每30天)。
据我了解,聚合点由influxdb根据时间的第一个值(GROUP BY time(value))进行预定义。它甚至在文档中提到过,但规模更小-“预设时间范围”。但是,这些示例处理的是分钟和1天的汇总,并且可以通过offset参数轻松修复,因为这些比例的默认汇总间隔为午夜。
这很酷,但是在这里我们要处理很多天。在我们的情况下,我们无法使用offset参数,因为我们无法知道GROUP BY返回的时间间隔。
是否有任何源/公式/算法或任何可帮助我们预测这些时间间隔的信息,以便我们可以对它们进行抵消?如果没有这样的东西,那我们该如何克服这个问题呢?
我想所有这一切的原因是性能,但是很奇怪的是,在他们的文档中没有提到这个问题,因为这不是一种直观的行为。
编辑:我想我发现流量是如何确定这些时间间隔的-它总是从0个纪元开始。如果是这样,那么我们可以在拍摄查询之前根据需要使用偏移量。我希望将其添加到他们的文档中,因为这可以为其他人节省大量时间,并且可以确认下一个版本中不会有重大更改。