TL;DR InfluxDB 技术提示 - SELECT 子句中的 InfluxQL 查询解决方案,字段键和选择器函数
作者:Regan Kuchan / 开发者
2016 年 12 月 01 日
导航至
在本周的文章中,我们回顾了上周 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 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"
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取得成功的经历。提交你的评价,并将获得一件限量版卫衣作为感谢。