TL;DR InfluxDB 技术技巧 - 在连续查询中下采样数据 & 原始 INTO 查询
由 Regan Kuchan / 开发者
2016年7月28日
导航到
在这篇文章中,我们回顾了本周最有趣的 InfluxDB 和 TICK-stack 相关问题、解决方案、如何在连续查询中下采样数据及原始 INTO 查询,以及来自 GitHub、IRC 和 InfluxDB Google Group 的问答,这些都是您可能错过的。
连续查询与原始 INTO 查询
问:我想自动从测量中下采样数据,并将这些下采样数据保存到另一个测量中。我已经写了一个连续查询 (CQ),但它似乎没有处理我的数据。我的语法是否正确,我对 CQ 的理解是否准确?
我的 CQ
> CREATE CONTINUOUS QUERY "downsample" ON "water_study" BEGIN SELECT max("sediment") INTO "downsampled_data" FROM "study1" WHERE time > now() - 1d GROUP BY time(30m),"quad" END
After I let it run for a while, I notice that InfluxDB never creates the measurement `downsampled_data`:
> SHOW MEASUREMENTS
name: measurements
------------------
name
study1
Note that there are data in the original measurement `study1`:
> SELECT * FROM study1 LIMIT 4
name: study1
------------
time quad sediment
2016-07-27T15:00:00Z 1 5
2016-07-27T15:00:00Z 4 7
2016-07-27T15:00:00Z 3 4
2016-07-27T15:00:00Z 2 3
答:关注您的 CQ 中的 WHERE
子句,您似乎试图在创建 CQ 之前的时间执行 CQ,即时间戳在创建 CQ 之前发生的旧数据。在您的 CQ 中包含 WHERE time > now() - 1d
不会奏效,原因有以下几点:
- CQ 忽略 `WHERE` 子句中的时间范围
- CQ 仅在新数据上运行,即时间戳在创建 CQ 之后发生的数据
要下采样旧数据,请使用基本的 INTO
查询。与 CQ 不同,原始 INTO
查询接受 `WHERE` 子句中的时间范围,并将适用于旧数据。
> SELECT max("sediment") INTO "downsampled_data" FROM "study1" WHERE time > now() - 1d GROUP BY time(30m),"quad"
name: result
------------
time written
1970-01-01T00:00:00Z 8
> SELECT * FROM "downsampled_data" LIMIT 4
name: downsampled_data
----------------------
time max quad
2016-07-27T15:00:00Z 6 1
2016-07-27T15:00:00Z 8 4
2016-07-27T15:00:00Z 4 3
2016-07-27T15:00:00Z 3 2
写入数据时的时间戳精度
问:我能够成功使用 HTTP API 将数据写入 InfluxDB,但我的时间戳始终不是我所期望的。我使用的是纪元时间 - 行协议接受不同的时间戳格式吗?
以 2016 年 7 月 7 日 14:00:00 的日期和时间写入数据
$ curl -POST "https://127.0.0.1:8086/write?db=test" --data-binary 'furniture futon=2 1469628000'
Query the data and see a timestamp in the 1970s:
> SELECT * FROM "furniture"
name: furniture
---------------
time futon
1970-01-01T00:00:01.469628Z 2
答:行协议仅接受纪元时间戳,但默认情况下,它假设时间戳以纳秒为单位。然而,您的时间戳是以秒为单位的。使用查询字符串参数 precision
指定替代时间戳精度
$ curl -POST "https://127.0.0.1:8086/write?db=test&precision=s" --data-binary 'furniture futon=2 1469628000'
> SELECT * FROM "furniture"
name: furniture
---------------
time futon
2016-07-27T14:00:00Z 2
有关查询字符串参数的更多信息,请参阅 API 参考。
有关更多 InfluxDB 技巧,请参阅我们的 常见问题解答 页面,并在 InfluxDB 用户组 中自由提问。
接下来是什么?
- 在您的基础设施上寻找 InfluxDB 集群?现在可免费评估 InfluxDB Enterprise Beta,开始使用。
- 下载 并 开始使用 InfluxDB 1.0 Beta 3
- 安排与解决方案架构师进行 免费 20 分钟咨询,以审查您的 InfluxDB 项目
- 参加我们免费的虚拟培训研讨会。