【问题标题】:Time based conditions in influxdbinfluxdb 中基于时间的条件
【发布时间】:2015-02-13 21:08:29
【问题描述】:

我正在试验 InfluxDB,并得到以下行为: 在创建了几行任意内容后,我选择了中间行的时间值ts 并查询:select * from test where time > ts

由于某种原因,这会返回所有行,包括时间戳较低的行。我是否误解了时间限制的语法?

附带说明,如果我以分钟为间隔创建行,并使用条件where time > now() -1m,我只会得到最后一分钟创建的行。

【问题讨论】:

    标签: influxdb


    【解决方案1】:

    来自 InfluxDB 站点 query language 文档:

    注意,时间是一个很大的数字。那是因为它是一个微秒级的时代。 InfluxDB 总是以这种比例存储点,但大多数库会将时间作为秒或毫秒比例值返回。如果您要选择一个特定的点,您需要知道该点所具有的确切的微秒级历元,否则您会得到一个意想不到的空结果。

    现在,使用 Influx 附带的默认 Web 界面,您可以看到像 1422883121396 这样的时间戳,而在上面的教程中,您可以看到 1400497861762723!第二个时间戳有更多的数字,实际上是微秒刻度(不完整,显示 3,而应该有 6)。因此,像 time > 1422883121396 这样查询,您查询的是一个非常旧的日期/时间,因此会返回所有结果。

    解决方案:

    1. 使用返回完整时间戳的库,但是我从未使用过,所以我不知道

    2. 如果您并不真正关心微秒精度,作为一种解决方法,您可以在时间戳末尾添加 000000 以将其转换为正确的刻度

    有些应用程序可能需要这种精度(例如模拟软件),但在大多数情况下,#2 解决方法应该可以工作。

    希望以上内容能解决您的问题

    【讨论】:

    • 哇,我不得不谷歌what is a microsecond?
    • 在最新版本的 InfluxDB 中,我看到时间戳现在以纳秒为单位,因此上述建议必须更改为将“000000000”添加到以秒为单位的时间戳。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    相关资源
    最近更新 更多