TL;DR InfluxDB 技术技巧 - InfluxDB 聚合函数

导航到

在这篇文章中,我们回顾了本周最有意思的 InfluxDB 聚合函数以及与 TICK-stack 相关的问题、解决方案、教程和问答,这些内容来自 GitHub、IRC 和 InfluxDB Google 群组,您可能错过了。

理解聚合函数返回的时间戳

 

问题:为什么以下查询返回了 1970-01-01T00:00:00Z 时间戳?我的数据中没有这个时间戳。

> SELECT mean(lions) FROM animals
name: animals
-------------
time                   mean
1970-01-01T00:00:00Z   9.333333333333334

回答:InfluxDB 使用纪元 0(1970-01-01T00:00:00Z)作为空时间戳。如果查询没有特定的返回时间戳,则会返回纪元 0。

聚合函数,如 mean(),没有特定的返回时间戳。如果您在 WHERE 子句中不包括时间范围,聚合函数将返回纪元 0。如果您在 WHERE 子句中包含时间范围,聚合函数将返回时间范围内的第一个时间戳。例如

> SELECT mean(lions) FROM animals WHERE time >= '2016-06-22T21:57:23Z' AND time <= '2016-06-22T21:57:32Z'
name: animals
-------------
time                   mean
2016-06-22T21:57:23Z   9.333333333333334

提高查询性能

问题:以下查询需要一段时间(大约五秒钟)才能运行。我预计它将以毫秒级运行。你有什么建议吗?

SELECT mean("temp") FROM "coffee" WHERE time = '2016-06-22T00:45:15Z' AND office='a' GROUP BY time(1s),office ORDER BY time DESC

回答:您可以通过删除 GROUP BY 子句和 ORDER BY time DESC 来简化查询并缩短运行时间。

您不需要在 WHERE 子句中 GROUP BY time(1s),因为您在 WHERE 子句中查询了特定的时间戳。同样,您不需要 GROUP BY office,因为您在 WHERE 子句中查询了特定的 office。最后,您不需要 ORDER BY time DESC,因为您的查询返回了一个单点。

SELECT mean("temp") FROM "coffee" WHERE time = '2016-06-22T00:45:15Z' AND office='a'

在 SHOW TAG VALUES 中使用正则表达式

问题:SHOW TAG VALUES 查询中是否可以使用正则表达式?

回答:是的!SHOW TAG VALUES 支持在 WITH KEY 子句中使用正则表达式。例如,返回所有不包含字母 p 的标签键的标签值

> SHOW TAG VALUES WITH KEY !~ /.*p.*/
name: mymeas
------------
key    value
forte  4
salt   1
salt   2

以下查询应该更快:更多 InfluxDB 技巧,请查看我们的 常见问题解答 页面,并随时在 InfluxDB 用户组 中提问。

接下来是什么?

  • 在您的基础设施上寻找 InfluxDB 集群?现在可以开始使用 InfluxDB 企业版 Beta 版,现在可供评估。
  • 下载开始使用 InfluxDB 1.0 Beta 2
  • 安排与解决方案架构师进行 免费 20 分钟咨询,以审查您的 InfluxDB 项目。
  • 参加我们的免费 虚拟培训研讨会