influxdb - InfluxDB:分组超过1天时开始时间错误
问题描述
当时间间隔超过 1 天时,我陷入了一个与问题相关的小组。当谷物超过 1 天时,它给出了不同谷物的错误开始时间。
- 谷物 = 1 天
- 预计开始时间=2019-01-01
- 实际开始时间=2019-01-01
> 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
- 谷物 = 2 天
- 预计开始时间=2019-01-01
- 实际开始时间=2018-12-31
> 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
- 谷物 = 5 天
- 预计开始时间=2019-01-01
- 实际开始时间=2018-12-30
> 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
我在文档中读到 Influx 使用当前时间边界,但没有说明当前时间边界是如何计算的。是一个月的开始还是一周的开始,还是收到第一个数据的时间或分片开始的时间?
如果我知道当前时间边界是如何计算的,我可以在 groupby 中指定偏移量以保留从 2019-01-01 开始的第一个时间段。
解决方案
InfluxDB 使用纪元时间来计算当前时间边界。它参考纪元时间创建 groupby 槽。
为了在 groupby 中保持开始时间相同,我需要传递一个偏移量。
这是一个用python编写的简单偏移量计算函数,它需要开始时间和groupby间隔。
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
Groupby 间隔为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
推荐阅读
- python - Python-requests,如何获取登录令牌
- dart - flutter dart如何列出map中特定键值的所有值
- prisma - 为什么 deleteMany 使用 2 个查询?
- twitter-bootstrap - Bootstrap 5.0.2 切换不起作用我正在按照 freecodecamp 教程使用 sass bootstrap 和 git bash 构建网站
- ravendb - 在 RavenDB 中按相关文档过滤
- angular - Angular 似乎错过了上下文
- r - 无法设法删除数据框中的 $ 模式
- r - 在列表上应用 paste0 函数
- android - 如何在 Android 上使用 MVP 模式处理多个改造 api 调用,其中所有端点的数据获取并不重要
- google-fit - Google Fit API 睡眠会话的时区