TL;DR InfluxDB 技术提示 - 关于 SELECT 子句、字段键和选择器函数的 InfluxQL 查询解决方案

导航至

在本周的帖子中,我们回顾了来自 GitHub、IRC 和 InfluxDB Google Group 中您可能错过的最有趣的 InfluxQL 查询和 TICK-stack 相关问题、解决方法、操作指南和问答。

SELECT 子句中的正则表达式

问:我在 SELECT 子句中指定了多个特定的字段键 - 有没有办法在不必全部列出的情况下做到这一点?

我当前的查询

SELECT user_name,user_id,user_email[,...] FROM all_the_data

答:从 1.1 版本开始,SELECT 子句支持正则表达式。以下查询可能有效,具体取决于您的数据

SELECT /user/ FROM all_the_data

查看数据探索页面或这个 InfluxQL 简短教程,了解有关 SELECT 子句的更多信息。

删除单个字段键的解决方法

问:有没有办法从度量中删除特定的字段键?我看到DROP SERIESDELETEDROP MEASUREMENT,但我找不到任何关于删除字段键的内容。

答:目前,InfluxQL 没有用于从度量中删除特定字段键的查询。作为一种解决方法,您可以将要保留的字段键写入不同的度量,删除原始度量,然后将保存的字段键写回原始度量。

原始数据

> SELECT * FROM "holidays"
name: holidays
time                  TOREMOVE  happiness_index self_worth user_id <--- this is a tag
----                  --------  --------------- ---------- -------
2016-11-30T20:05:48Z  0         20              10         1
2016-11-30T20:06:30Z  0         12              0.9        1
2016-11-30T20:07:13Z  0         13              4          1

将必要的字段键写入不同的度量 (holidays_copy)

> SELECT "happiness_index","self_worth" INTO "holidays_copy" FROM "holidays" GROUP BY *
name: result
time			written
----			-------
1970-01-01T00:00:00Z	3

> SELECT * FROM "holidays_copy"
name: holidays_copy
time                  happiness_index  self_worth  user_id
----                  ---------------  ----------  -------
2016-11-30T20:05:48Z  20               10          1
2016-11-30T20:06:30Z  12               0.9         1
2016-11-30T20:07:13Z  13               4           1

删除原始度量

> DROP MEASUREMENT "holidays"
>

将保存的字段键写回原始度量

> SELECT * INTO "holidays" FROM "holidays_copy" GROUP BY *
name: result
time                  written
----                  -------
1970-01-01T00:00:00Z  3

> SELECT * FROM "holidays"
name: holidays
time                   happiness_index  self_worth user_id
----                   ---------------  ---------- -------
2016-11-30T20:05:48Z   20               10         1
2016-11-30T20:06:30Z   12               0.9        1
2016-11-30T20:07:13Z   13               4          1

请务必在您的 INTO 查询中包含 GROUP BY *,以将任何标签保留为标签

深入了解选择器函数

问:我不太理解选择器函数(如 LAST())在运行以下两个查询时的行为。查询 1 是否会返回 fungi_index 的最后一个值以及当时 tree_age 的值?对于查询 2,LAST 计算是否是独立的,如果 fungi_indextree_age 的最后一个值发生在不同的时间,该查询将返回什么时间戳?

查询 1

SELECT LAST("fungi_index"),"tree_age" FROM "forest"

查询 2

SELECT LAST("fungi_index"),LAST("tree_age") FROM "forest"

答:您对查询 1 的理解是正确的;它确实返回 fungi_index 的最后一个值以及当时 tree_age 的值。您可以在返回数据的列标题中看到这一点。fungi_index 最后一个值的标题是 lasttree_age 值的标题是 tree_age

查询 2 返回一个单点,其中包含 fungi_index 的最后一个值和 tree_age 的最后一个值,独立于 fungi_index 的最后一个值。该点的时间戳是 1970-01-01T00:00:00Z(InfluxDB 的空时间戳等效值),因为 InfluxDB 无法为单点返回多个时间戳。

原始数据

> SELECT * FROM forest
name: forest
time                  fungi_index   tree_age
----                  ------------  --------
2016-11-30T21:43:00Z  12            85
2016-11-30T21:44:00Z  34            172
2016-11-30T21:45:00Z  8

查询 1

> SELECT LAST("fungi_index"),"tree_age" FROM "forest"
name: forest
time                  last  tree_age
----                  ----  --------
2016-11-30T21:44:00Z  34    172

查询 2

> SELECT LAST("fungi_index"),LAST("tree_age") FROM "forest"
name: forest
time                  last  last_1
----                  ----  ------
1970-01-01T00:00:00Z  34    8

有关更多 InfluxDB 提示,请参阅我们的常见问题解答页面,并随时在InfluxDB 用户组中发布您的问题!

下一步是什么

  • 下载适用于 TICK-stack 的下载页面已上线
  • 云端部署:开始免费试用 InfluxDB Cloud,它具有完全托管的集群、Kapacitor 和 Grafana。
  • 在您的服务器上部署:想在您的服务器上运行 InfluxDB 集群?免费试用 14 天 InfluxDB Enterprise,它具有用于部署、监控和重新平衡集群的直观 UI,以及管理备份和恢复的功能。
  • 讲述您的故事:超过 100 家公司分享了他们关于 InfluxDB 如何帮助他们取得成功的故事。提交您的客户评价,即可获得限量版连帽衫作为感谢。