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

导航至

在本周的文章中,我们回顾了上周 GitHub、IRC 以及 InfluxDB Google Group 中最有趣的 InfluxQL 查询和 TICK-stack 相关问题、解决方案、教程和问答。GitHub、IRC 和 InfluxDB Google Group

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"

A:关于查询1,你说得对;它确实返回了fungi_index的最后一个值和当时tree_age的值。你可以在返回数据的列标题中看到这一点。最后一个fungi_index值的标题是last,而tree_age值的标题是tree_age

查询2返回一个点,该点包含fungi_index的最后一个值和tree_age的最后一个值,与fungi_index的最后一个值无关。该点的戳记是1970-01-01T00:00:00Z(InfluxDB的null时间戳等效),因为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堆栈的下载现在可在我们的“下载”页面查看
  • 云上部署:开始使用具有完全托管集群、Kapacitor和Grafana的免费试用版InfluxDB Cloud
  • 在您的服务器上部署:想在自己的服务器上运行InfluxDB集群吗?尝试免费的14天试用版InfluxDB企业版,它具有用于部署、监控和平衡集群的直观UI,以及管理备份和还原。
  • 分享你的故事: 超过100家公司分享了他们如何使用InfluxDB取得成功的经历。提交你的评价,并将获得一件限量版卫衣作为感谢。