如何在InfluxDB中存储日期

时间:2015-02-18 17:08:02

标签: influxdb

我需要开发一个InfluxDB时间序列。时间序列需要包含以下信息:

  • time - 记录数据的时间。这将使用InfluxDB时间字段。
  • value - 时间序列的值。一个简单的整数。
  • date - 与值关联的单独日期。这个日期与" time"无关。领域。它将用于帮助缩小查询范围。

我目前的想法是保存上述" date"字段作为单独的"列"在时间序列中,我可以使用"其中"使用该日期过滤数据的子句。但是,我正在努力解决这个问题。 InfluxDB是否支持任何类型的日期或日期/时间字段?对于"时间"字段似乎只是使用毫秒。但是,如果我在具有不同名称的字段中尝试相同,则正常时间查询不起作用。例如:

select * from myseries where time > now() - 1d

以上查询可以正常使用。

VS

select * from myseries where date > now() - 1d

此查询将失败并显示错误,因为它似乎不知道如何处理" date"作为时间价值。

这种情况下的日期有更好的表示吗?

2 个答案:

答案 0 :(得分:2)

InfluxDB数据类型可以是浮点数,整数,布尔值和字符串。 [^]字段是一个特殊例外。

您可以使用表示日期字段的count-since-epoch的整数。像now()这样的好方便的功能虽然看起来不起作用(使用v0.13):

time

使用insert test_dates date_int=1573405622000000000i,desc="years from now" insert test_dates date_int=1373405661000000000i,desc="years ago"

进行测试
now()

给出:

select * from test_dates where date_int > now()

name: test_dates

time                    date_int                desc 
1473404302801938064     1573405622000000000     years from now
1473404315927493772     1373405661000000000     years ago

给出:

select * from test_dates where date_int < now()

似乎每个name: test_dates time date_int desc 1473462286404084162 1573405622000000000 years from now 1473462286408231540 1373405661000000000 years ago 都大于小于date_int

因此,如果使用整数,则比较不是语法错误,但不会按照我们想要的方式运行。

解决此问题的一种方法是在前端应用程序中创建自己的日期到int转换。然后前端的日期比较是InfluxDB中的int比较。笨重,但这些是我们拥有的数据类型。

InfluxDB中存储的日期可以是单个基于纪元的int,也可以在InfluxDB中存储年,月,日的单独int字段。在后一种情况下,查询更大更慢,但更容易阅读和调试。

祝你好运!

答案 1 :(得分:-2)

如果您可以将日期保存在纪元值中,或者您可以使用“YYYY-MM-DD HH:MM:SS.mmm”格式,则更容易。以下查询示例来自文档。

select value from response_times
where time > '2013-08-12 23:32:01.232' and time < '2013-08-13';