TL;DR InfluxDB技术技巧 - 移动数据 & 获取无法查询的标签,基于函数结果查询数据 & 更多

导航至

在本周的文章中,我们回顾了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(这就是为什么你会在查询结果中看到idid_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取得成功的故事。提交你的感言,并作为感谢获得限量版卫衣。