TL;DR InfluxDB 技术提示 - 有趣的 InfluxDB 时间戳问题和 INTO 子句

导航至

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

负时间戳

问:我正在将历史数据输入到 InfluxDB 中。是否可以写入时间戳早于 epoch 0 的数据?

答:是的!InfluxDB 支持负时间戳。最小可接受时间戳为 -92233720368547758061677-09-21T00:12:43.145224194Z。这是一个在线协议中使用负时间戳的示例 - 人类可读格式的时间戳为 1969-12-07T18:47:12Z

> INSERT holidata snow=3 -2092368000000000

带有 INTO 子句的函数

问: 当我使用 DISTINCT() 而不带 INTO 子句 时,一切都按预期工作。当我使用带有 INTO 子句的 DISTINCT() 时,最终会丢失目标 measurement 中的数据点。这是预期的行为吗?我错过了什么?我的数据

> SELECT * FROM "influxdays"
name: influxdays
time                  value
----                  -----
2016-12-01T19:06:50Z  fa
2016-12-04T19:12:19Z  fa
2016-12-14T19:06:50Z  fa la
2016-12-17T19:06:50Z  fa la la

DISTINCT() 不带 INTO

> SELECT DISTINCT("value") FROM "influxdays"
name: influxdays
time                  distinct
----                  --------
1970-01-01T00:00:00Z  fa
1970-01-01T00:00:00Z  fa la         <---- There are three distinct values! 
1970-01-01T00:00:00Z  fa la la

DISTINCT() 带 INTO

> SELECT DISTINCT("value") INTO "influxdays_copy" FROM "influxdays"
name: result
time                  written
----                  -------
1970-01-01T00:00:00Z  3             <---- It says it wrote three points!

目标 measurement 中的结果

> SELECT * FROM "influxdays_copy"
name: influxdays_copy
time                  distinct
----                  --------
1970-01-01T00:00:00Z  fa la la      <---- I only see one point!

答:您看到的是预期的行为,但我可以理解这不一定符合您的期望。

DISTINCT() 这样的函数(另请参阅 TOP() 和 BOTTOM())通常返回多个具有相同时间戳的点。InfluxDB 假设具有相同 series 和时间戳的点是重复的点,因此,当您在查询中包含 INTO 子句时,InfluxDB 只是覆盖它认为在目标 measurement 中重复的点。

带有 fill() 的 COUNT()

问: 大多数 InfluxQL 函数对于没有数据的时间间隔报告 null 值,但 COUNT() 对于没有数据的时间间隔报告 0。那么 fill() 如何与 COUNT() 一起使用呢?

答: fill(<fill_option>)COUNT() 一起使用会将任何 0 值替换为给定的 fill_option

不带 fill()

> SELECT COUNT("partridge") FROM "gifts" WHERE time >= '2016-12-07T00:00:00Z' AND time <= '2016-12-07T02:00:00Z' GROUP BY time(1h)
name: gifts
time                  count
----                  -----
2016-12-07T00:00:00Z  1
2016-12-07T01:00:00Z  2
2016-12-07T02:00:00Z  0

fill()

> SELECT COUNT("partridge") FROM "gifts" WHERE time >= '2016-12-07T00:00:00Z' AND time <= '2016-12-07T02:00:00Z' GROUP BY time(1h) fill(30)
name: gifts
time                  count
----                  -----
2016-12-07T00:00:00Z  1
2016-12-07T01:00:00Z  2
2016-12-07T02:00:00Z  30        <--- now the zero is 30

有关更多 InfluxDB 技巧,请参阅我们的 常见问题解答 页面,并随时在 InfluxDB 用户组 中发布您的问题!

下一步

  • 下载 TICK-stack 的下载已在我们的“下载”页面上线
  • 在云端部署: 开始免费试用 InfluxDB Cloud,它具有完全托管的集群、Kapacitor 和 Grafana。
  • 在您的服务器上部署: 想在您的服务器上运行 InfluxDB 集群吗?免费试用 InfluxDB Enterprise 14 天,它具有用于部署、监控和重新平衡集群的直观 UI,以及管理备份和恢复。 
  • 讲述您的故事: 超过 100 家公司 分享了 InfluxDB 如何帮助他们取得成功的故事。提交您的证词,即可获得限量版连帽衫作为感谢。