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 中包含 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,但我的时间戳始终与我期望的不符。我正在使用纪元时间 - Line Protocol 是否接受不同的时间戳格式?
写入时间戳为 2016 年 7 月 7 日 14:00:00 的数据
$ curl -POST "http://localhost: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
答: Line protocol 仅接受纪元时间戳,但默认情况下,它假定时间戳以纳秒为单位。但是,您的时间戳以秒为单位。使用查询字符串参数 precision
来指定替代时间戳精度
$ curl -POST "http://localhost: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 项目
- 参加我们的免费 虚拟培训研讨会之一。