TL;DR InfluxDB 技术提示 - 移动数据 & 获取无法查询的标签,基于函数结果查询数据 & 更多
作者:Regan Kuchan / 产品, 开发者
2017年1月5日
导航至
在这篇每周文章中,我们回顾了您可能在过去一周左右错过的来自 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
query 将 ELAPSED()
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 如何帮助他们取得成功的故事。提交您的客户评价,即可获得限量版连帽衫作为感谢。