TL;DR InfluxDB 技术提示 - 关于 SELECT 子句、字段键和选择器函数的 InfluxQL 查询解决方案
作者:Regan Kuchan / 开发者
2016 年 12 月 01 日
导航至
在本周的帖子中,我们回顾了来自 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 SERIES
、DELETE
和 DROP 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_index
和 tree_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
最后一个值的标题是 last
,tree_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 如何帮助他们取得成功的故事。提交您的客户评价,即可获得限量版连帽衫作为感谢。