【问题标题】:Continuous queries in Influxdb ignoring where clause?Influxdb 中的连续查询忽略 where 子句?
【发布时间】:2015-08-15 06:33:29
【问题描述】:

influxdb 0.8.8 中的连续查询有点麻烦。 我正在尝试创建一个连续查询,但似乎忽略了 where 子句。我知道这里提到的限制:http://influxdb.com/docs/v0.8/api/continuous_queries.html,但我认为这里不会出现这种情况。

时间序列中的一行将包含如下数据:

{"hex":"06a0b6", "squawk":"3421", "flight":"QTR028  ", "lat":99.867630, "lon":66.447365, "validposition":1, "altitude":39000,  "vert_rate":-64,"track":125, "validtrack":1,"speed":482, "messages":201, "seen":219}

我正在运行的查询如下:

select * from flight_series where time > now() - 30m and flight !~ /^$/ and validtrack = 1 and validposition = 1;

通过它,我试图从当前时间开始最后 30 分钟,检查飞行字段是否没有空格,并且轨道/位置是否有效。 查询成功返回,但是当我添加

into filtered_log

部分'where'子句被忽略。

如何创建考虑到上述条件的连续查询?至少,我如何才能通过一个连续查询仅提取有效轨道/标题设置为 1 且航班不是空格/空字符串的行?我可以从查询中消除时间限制并转化为分片保留/持续时间。

另外,我是否可以在连续查询中指定将数据保存到位于另一个数据库(具有更宽松的保留/持续时间政策)的时间序列中?

谢谢!

后期编辑:

通过使用以下 cq,我设法做一些更接近我需要的事情:

"select time, sequence_number, altitude, vert_rate, messages, squawk, lon, lat, speed, hex, seen from current_flights where ((flight !~ /^$/) AND (validtrack = 1)) AND (validposition = 1) into flight.[flight]"

这会为每个“航班”创建一个系列,即使对于那些在“航班”字段中有空格的人 - 航班。系列已建成。

如何为上述 cq 生成的系列指定保留/持续时间策略?我可以这样做吗:

"spaces": [
    {
      "name": "flight",
      "retentionPolicy": "1h",
      "shardDuration": "30m",
      "regex": "/.*/",
      "replicationFactor": 1,
      "split": 1
    },
 ...

这会给我 1h 的保留时间和 30m 的分片持续时间?

我有点困惑这些系列的存储位置,哪个分片空间?

谢谢!

P.S.:我的最终目标如下: 有一个最大为 15-30 分钟的“窗口”,所有航班都在附近,处理其中的一些数据,然后在这段时间结束后丢弃数据,但同时将其移动/复制到另一个长期的数据库/系列,这可以是用于历史目的。

【问题讨论】:

    标签: database database-design time-series database-schema influxdb


    【解决方案1】:

    您不能在连续查询的 WHERE 子句中设置时间限制。当 CQ 运行时,服务器会根据需要生成时间限制,并且必须忽略所有其他时间限制。我怀疑如果您忽略时间限制,WHERE 子句的其余部分会很好。

    我不相信 0.8 中的 CQ 需要在 SELECT 中进行聚合,但您确实需要有 GROUP BY 子句来告诉 CQ 多久运行一次。我不确定你会 GROUP BY,也许是 flight

    您可以在写入新系列而不是新数据库时指定不同的保留策略。在 0.8 中,系列的保留策略由系列名称的正则表达式匹配确定。只要您正确选择了系列名称,它将进入您所需的保留政策。

    编辑:新问题的更新

    如何指定该系列的保留/持续时间政策 上面的cq生成的?

    在 0.8.x 中,系列所属的分片空间控制保留策略。分片空间上的正则表达式决定了哪个系列属于该分片。分片空间正则表达式从最新到最旧进行评估,这意味着第一个创建的分片空间将是最后一个评估的正则表达式。不幸的是,我确实知道一旦数据库存在就可以创建新的分片空间。有关更多信息,请参阅邮件列表上的讨论:https://groups.google.com/d/msgid/influxdb/ce3fc641-fbf2-4b39-9ce7-77e65c67ea24%40googlegroups.com

    我可以这样做吗:

    “空格”:[ { “名称”:“飞行”, "retentionPolicy": "1h", "shardDuration": "30m", "正则表达式": "/.*/", “复制因子”:1, “分裂”:1 }, ... 这会给我 1h 的保留时间和 30m 的分片持续时间?

    该分片空间的分片持续时间为 30 分钟,保留数据 1 小时,这意味着任何系列都只会存在于三个分片中,即当前热分片、当前冷分片和等待删除的分片。

    正则表达式是 /./,这意味着它可以匹配任何系列,而不仅仅是“flight”。系列。或许 /flight../ 是一个更好的正则表达式,如果您只想要 CQ 在该分片空间中生成的那些系列。

    【讨论】:

      猜你喜欢
      • 2012-09-18
      • 1970-01-01
      • 2012-12-29
      • 2021-01-07
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      • 2023-04-01
      • 2018-12-13
      相关资源
      最近更新 更多