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

导航至

在这篇每周文章中,我们回顾了您可能在过去一周左右错过的来自 GitHub、IRC 和 InfluxDB Google Group 的最有趣的 InfluxDB 和 TICK-stack 相关问题、解决方法、操作指南和问答。

移动数据和获取无法查询的标签

问: 我正在使用 INTO query 将数据移动到同一 measurement 中不同的 retention policy (RP)。数据似乎已在新 RP 中,但是:1) 我看到似乎重复的 tag key,并附加了 _1,以及 2) 我无法再在新 RP 中按 tag 对 group 查询结果进行分组。

知道这里发生了什么吗?

# 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 查询会将原始数据中的任何 tag 转换为目标数据中的 fields。当您运行 INTO 查询时,concentration measurement 最终会得到一个 tag key id 和一个 field key id(这就是为什么您在查询结果中看到 id 和 id_1 的原因)。此外,您无法对新写入的数据执行 GROUP BY id,因为 id 是一个 field,而 InfluxQL 不支持按 field 进行 GROUP

只需在您的 INTO 查询中包含 GROUP BY id,以将 id 保留在新 RP 中作为 tag。 一般来说,我们 建议 您始终在 INTO 查询中包含 GROUP BY *,因为该子句会将原始数据中的所有 tag 保留在目标数据中作为 tag。

基于函数结果查询数据

问: 我正在尝试识别以比预期更长的时间间隔写入数据库的点。更具体地说,我想找到在上一​​个点之后七分钟以上写入的点。我尝试了以下查询,但 InfluxQL 不支持;您知道有什么方法可以做到这一点吗?

我理想的查询

> SELECT "blinks" FROM "reactions" WHERE ELAPSED("blinks") > 7m

答: 您是对的,截至 1.1 版本,您无法执行该查询。作为一种解决方法,您可以通过两个步骤获得您想要的结果。首先,使用 INTO queryELAPSED() function 的结果写入您的数据库。其次,查询这些 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()

问: 我已经开始使用 ELAPSED() function,我想知道如果我指定的 unit 大于时间戳之间的差异会发生什么。所以如果我在函数中指定 1w,而点之间仅相隔一分钟,InfluxDB 会做什么?我会收到错误吗?

答: 如果 unit 选项大于时间戳之间的差异,InfluxDB 将返回 0

tea measurement 中的时间戳以一分钟为间隔出现。如果查询要求时间戳之间相隔几周,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 如何帮助他们取得成功的故事。提交您的客户评价,即可获得限量版连帽衫作为感谢。