TL;DR InfluxDB技术技巧 - 时间桶中的空结果
作者:Regan Kuchan / 开发者
2016年7月14日
导航至
在这篇文章中,我们回顾了一周内最有趣的InfluxDB和TICK-stack相关的问题、解决方案、从GitHub、IRC和InfluxDB Google Group中获取的如何操作和问答,这些都是您可能错过的。
检查WHERE子句中的时间范围顺序
问:我的查询中时间范围的顺序对性能有影响吗?例如,以下两个查询哪一个更快?
SELECT ... FROM ... WHERE time > 'datestamp1' AND time < 'datestamp2'
SELECT ... FROM ... WHERE time < 'datestamp2' AND time > 'datestamp1'
答:没有。我们测试了您的问题,结果显示,InfluxDB完成这两个查询所需的时间几乎没有差异。
理解fill(previous)
问:我在一个GROUP BY time()
查询中使用fill(previous)
,但某些时间桶仍然得到空结果。这是预期的行为吗?
原始数据
> SELECT * FROM "cupcakes"
name: cupcakes
--------------
time chocolate
2016-07-12T16:50:00Z 3
2016-07-12T16:50:10Z 2
2016-07-12T16:50:40Z 12
2016-07-12T16:50:50Z 11
GROUP BY time()
查询
> SELECT max("chocolate") FROM "cupcakes" WHERE time >= '2016-07-12T16:50:20Z' AND time <= '2016-07-12T16:51:10Z' GROUP BY time(20s) fill(previous)
name: cupcakes
--------------
time max
2016-07-12T16:50:20Z
2016-07-12T16:50:40Z 12
2016-07-12T16:51:00Z 12
我原本预计在时间戳等于2016-07-12T16:50:20Z
的地方max
的值应该是3
。
答:InfluxDB不会用2016-07-12T16:50:00Z
-2016-07-12T16:50:10Z
时间桶的结果填充2016-07-12T16:50:20Z
-2016-07-12T16:50:30Z
时间桶,因为您的查询时间范围不包含较早的时间桶。
虽然这是fill(previous)
的预期行为,但GitHub上有一个功能请求建议即使先前值在查询时间范围之外,也应填充结果。
使用HTTP API指定查询时间戳精度
问:是否有方法可以更改HTTP API返回的时间戳精度?我希望我的时间戳精度为小时。
$ curl -GET 'https://127.0.0.1:8086/query?db=census&pretty=true' --data-urlencode 'q=SELECT * FROM "rainforest"'
{
"results": [
{
"series": [
{
"name": "rainforest",
"columns": [
"time",
"toad_count"
],
"values": [
[
"1984-11-03T14:13:20Z",
67
]
]
}
]
}
]
}
答:使用查询字符串参数epoch
指定不同的时间戳精度。请注意,此选项返回的是epoch时间。
$ curl -GET 'https://127.0.0.1:8086/query?db=census&pretty=true&epoch=h' --data-urlencode 'q=SELECT * FROM "rainforest"'
{
"results": [
{
"series": [
{
"name": "rainforest",
"columns": [
"time",
"toad_count"
],
"values": [
[
130094,
67
]
]
}
]
}
]
}
有关查询字符串参数的更多信息,请参阅API参考文档。
有关更多InfluxDB技巧,请参阅我们的常见问题解答页面,并欢迎您在InfluxDB用户组中提问。
接下来是什么?
- 在您的基础设施上寻找InfluxDB集群?现在可以开始使用InfluxDB Enterprise Beta版进行评估。
- 下载并开始使用InfluxDB 1.0 Beta 2。
- 安排一次免费20分钟咨询,由解决方案架构师审查您的InfluxDB项目。
- 参加我们的免费虚拟培训研讨会之一。