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

导航到

在本周的文章中,我们回顾了上周最有趣的InfluxDB时间戳和TICK-stack相关问题,具有INTO子句的函数,解决方案,如何操作和问答,这些问题可能在上周被您遗漏。GitHub,IRC和InfluxDB Google Group

负时间戳

问:我在将历史数据输入InfluxDB。是否可以写入时间戳发生在epoch 0之前的数据?

A: 是的!InfluxDB 支持负时间戳。最小可接受的时间戳是 -92233720368547758061677-09-21T00:12:43.145224194Z。这里是一个 行协议 中负时间戳的示例——可读的时间戳是 1969-12-07T18:47:12Z

> INSERT holidata snow=3 -2092368000000000

带有 INTO 子句的函数

Q: 当我使用没有 INTO 子句DISTINCT() 时,一切按预期工作。当我使用 DISTINCT() 和 INTO 子句时,目标测量中缺少数据点。这是预期的行为吗?我漏掉了什么?我的数据

> 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!

目标测量中的结果

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

A: 你所看到的是预期的行为,但我觉得这不一定是你所期望的。

DISTINCT() (也见 TOP() 和 BOTTOM())这样的函数通常会返回具有相同时间戳的几个点。InfluxDB 假设具有相同系列和时间戳的点都是重复的点,因此,当你在查询中包含 INTO 子句时,InfluxDB 简单地覆盖它认为在目标测量中是重复的点。

COUNT() 与 fill()

Q: 大多数 InfluxQL 函数对没有数据的日期范围报告 null 值,但 COUNT() 对没有数据的日期范围报告 0 。那么 fill() 是如何与 COUNT() 一起工作的呢?

A: 使用 fill(<fill_option>)COUNT() 替换任何 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)
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 取得成功的故事。提交你的故事,作为感谢,你将获得一件限量版卫衣。