TL;DR InfluxDB技术技巧 - 时间桶中的空结果

导航至

在这篇文章中,我们回顾了一周内最有趣的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用户组中提问。

接下来是什么?