TL;DR InfluxDB技术技巧 - 移动数据 & 获取无法查询的标签,基于函数结果查询数据 & 更多
由 Regan Kuchan / 产品, 开发者
2017年1月5日
导航至
在本周的文章中,我们回顾了InfluxDB和TICK-stack相关的有趣问题、解决方案、操作指南和问答,这些问题、解决方案、操作指南和问答可能在上周或之前的一段时间内被您忽略。
移动数据和获取无法查询的标签
问:我正在使用一个INTO查询将数据移动到同一测量中的不同保留策略(RP)。看起来数据已经出现在新的RP中,但是:1) 我看到了一个似乎重复的标签键,并在其后面附加了_1
,2) 我无法在新RP中通过标签对查询结果进行分组。
有什么想法吗?
# Original data > SELECT * FROM "trees"."autogen"."concentration" name: concentration time chlorophyll id <---- id is a tag ---- ----------- -- 2017-01-04T21:35:48Z 10 a 2017-01-04T21:36:48Z 6 b # INTO query > SELECT * INTO "trees"."one_day"."concentration" FROM "trees"."autogen"."concentration" name: result time written ---- ------- 1970-01-01T00:00:00Z 2 <---- seems to work! # New data > SELECT * FROM "trees"."one_day"."concentration" name: concentration time chlorophyll id id_1 <---- empty duplicate tag? ---- ----------- -- ---- 2017-01-04T21:35:48Z 10 a 2017-01-04T21:36:48Z 6 b # GROUP BY tag on the new data > SELECT * FROM "trees"."one_day"."concentration" GROUP BY "id" name: concentration tags: id= <---- doesn't seem to recognize id as a tag time chlorophyll id ---- ----------- -- 2017-01-04T21:35:48Z 10 a 2017-01-04T21:36:48Z 6 b
答:虽然这看起来有点奇怪,但你所看到的是预期的行为。默认情况下,INTO
查询将原始数据中的任何标签转换为目的地数据中的fields
。当你运行INTO
查询时,concentration
测量最终会得到一个标签键id
和一个字段键id
(这就是为什么你会在查询结果中看到id
和id_1
)。此外,由于id
是一个字段,InfluxQL不支持通过字段进行GROUP
。
只需在INTO
查询中包含GROUP BY id
,即可在新RP中保持id
作为标签。一般来说,我们建议你始终在INTO
查询中包含GROUP BY *
,因为该子句会将原始数据中的所有标签保留为目的地数据中的标签。
根据函数结果查询数据
问:我正在尝试识别写入数据库的间隔比预期更长的点。更具体地说,我想找到在上一条记录之后超过七分钟才写入的点。我已经尝试了下面的查询,但InfluxQL不支持它;你知道如何做吗?
我的理想查询
> SELECT "blinks" FROM "reactions" WHERE ELAPSED("blinks") > 7m
答:你说得对,截至版本1.1,你无法执行该查询。作为解决方案,你可以分两步得到你想要的结果。首先,使用一个INTO查询将ELAPSED()
函数的结果写入到你的数据库中。其次,查询这些ELAPSED()
结果,并包含你的七分钟条件。
# Step 1 > SELECT ELAPSED("blinks",1m) AS "elapsed_blinks" INTO "elapsed_reactions" FROM "reactions" name: result time written ---- ------- 1970-01-01T00:00:00Z 3 # Step 2 > SELECT "elapsed_blinks" FROM "elapsed_reactions" WHERE "elapsed_blinks" > 7 name: elapsed_reactions time elapsed_blinks ---- -------------- 2017-01-04T21:18:00Z 8
当unit
> elapsed time时使用ELAPSED()
问:我开始使用ELAPSED()
函数,我想知道如果我指定的unit
大于时间戳之间的差异会发生什么。所以,如果我指定函数中的1w
,而点之间只有一分钟,会发生什么?我会收到错误吗?
答:InfluxDB在unit
选项大于时间戳之间的差异时返回0
。
tea
测量中的时间戳以一分钟为间隔。如果查询请求时间戳之间的周数,InfluxDB返回0
> SELECT ELAPSED("green",1w) FROM "tea" name: tea time elapsed ---- ------- 2017-01-05T00:14:00Z 0
接下来是什么
- 下载TICK-stack的下载在我们的“下载”页面上。
- 云上部署:开始使用InfluxDB Cloud的免费试用,其中包括完全托管的集群、Kapacitor和Grafana。
- 在您的服务器上部署:想要在您的服务器上运行InfluxDB集群?尝试InfluxDB Enterprise的免费14天试用,其中包括用于部署、监控和重新平衡集群的直观UI,以及管理备份和恢复。
- 讲述你的故事: 超过300家公司 分享了他们如何通过InfluxDB取得成功的故事。提交你的感言,并作为感谢获得限量版卫衣。