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 上的一个开放功能请求 feature request 建议,即使先前的值落在查询的时间范围之外,fill(previous) 也应该填充结果。

使用 HTTP API 指定查询时间戳精度

问: 有没有办法更改 HTTP API 返回的时间戳精度?我希望我的时间戳精度为小时。

$ curl -GET 'http://localhost: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 'http://localhost: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 用户组中发布您的问题。

下一步是什么?