当时间间隔超过1天时,我陷入了一个与问题相关的小组。谷物超过1天时,不同谷物的开始时间设置错误。
> select mean("messages") from rabbitmq where host='rabbitmq_cluster' and time>='2019-01-01 00:00:00' and time<'2019-01-16 00:00:00' GROUP BY time(1d), "host" LIMIT 2;
time mean_messages
---- ----
2019-01-01T00:00:00Z 181232
2019-01-02T00:00:00Z 179728
> select mean("messages") from rabbitmq where host='rabbitmq_cluster' and time>='2019-01-01 00:00:00' and time<'2019-01-16 00:00:00' GROUP BY time(2d), "host" LIMIT 2;
time mean_messages
---- ----
2018-12-31T00:00:00Z 181232
2019-01-02T00:00:00Z 347824
> select mean("messages") from rabbitmq where host='rabbitmq_cluster' and time>='2019-01-01 00:00:00' and time<'2019-01-16 00:00:00' GROUP BY time(5d), "host" LIMIT 2;
time mean_messages
---- ----
2018-12-30T00:00:00Z 529056
2019-01-04T00:00:00Z 826694.3999999762
我在documentation中读到Influx使用当前时间边界,但是没有说出如何计算当前时间边界。是月初还是一周初或收到第一个数据的时间或分片开始的时间< / strong>?
如果我知道当前时间边界的计算方式,则可以在groupby中指定偏移量,以保持第一个时隙从2019-01-01开始。
答案 0 :(得分:0)
InfluxDB使用纪元时间来计算当前时间边界。它参考纪元时间创建分组时隙。
要在groupby中保持相同的开始时间,我需要传递一个偏移量。
这是一个用python编写的简单偏移量计算功能,它需要开始时间和分组间隔。
def get_offset(start_dt, interval_m):
epoch = datetime.datetime.utcfromtimestamp(0)
offset = (start_time - epoch).total_seconds() % (interval_m * 60)
return offset
start_dt = datetime.datetime(2019,1,1,0,0)
interval_m = 1440 * 3 # 3 days
offset_s = get_offset(start_dt, interval_m) # 172800
分组间隔为 3天,查询如下所示,带有偏移量。
> select mean("messages") from rabbitmq where host='rabbitmq_cluster' and time>='2019-01-01 00:00:00' and time<'2019-01-16 00:00:00' GROUP BY time(3d, 172800s), "host" LIMIT 2;
time mean_messages
---- ----
2019-01-01T00:00:00+05:30 539232
2019-01-04T00:00:00+05:30 464640