Influxdb 中的连续查询忽略了 where 子句?

Continuous queries in Influxdb ignoring where clause?

我在 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 分钟,检查航班字段是否为白色spaces 并且 track/position 是否有效。 查询 returns 成功,但是当我添加

into filtered_log

部分 'where' 子句被忽略。

如何创建考虑上述条件的连续查询?至少,我如何通过一个连续查询仅提取有效 track/heading 设置为 1 且航班不是 whitespace/empty 字符串的行?我可以从查询中消除时间限制并将其转化为分片 retention/duration.

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

谢谢!

稍后编辑:

我已经设法通过使用以下 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]"

这为每个 'flight' 创建了一个系列,即使对于那些在 'flight' 字段中有白色 space 的人也是如此——这是一个航班。系列已建成。

如何为上面的 cq 生成的系列指定 retention/duration 策略?我可以做类似的事情吗:

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

哪个会给我 1 小时的保留时间和 30 米的分片持续时间?

我对这些系列的存储位置感到有点困惑,哪个分片 space?

谢谢!

P.S.: 我的最终目标如下: 有一个 'window' 最多 15-30 分钟的所有航班,处理来自它们的一些数据,然后在该时间段结束后丢弃数据,但同时 move/copy 它到另一个长期 db/series 可用于历史目的。

您不能将时间限制放入连续查询的 WHERE 子句中。服务器将在 CQ 运行s 时根据需要生成时间限制,并且必须忽略所有其他。我怀疑如果您省略了时间限制,WHERE 子句的其余部分就可以了。

我不相信 0.8 中的 CQ 需要在 SELECT 中进行聚合,但您确实需要 GROUP BY 子句来告诉 CQ 多长时间 运行。我不确定你会 GROUP BY 什么,也许 flight?

您可以在写入新系列而非新数据库时指定不同的保留策略。在 0.8 中,系列的保留策略由系列名称的正则表达式匹配决定。只要您 select 系列名称正确,它就会进入您想要的保留政策。

编辑:新问题更新

How could I specify the retention/duration policies for the series generated by the cq above?

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

Can I do something like:

"spaces": [ { "name": "flight", "retentionPolicy": "1h", "shardDuration": "30m", "regex": "/.*/", "replicationFactor": 1, "split": 1 }, ... which would give me a retention of 1h and shard duration of 30m?

那个分片 space 将有 30 分钟的分片持续时间,保留数据 1 小时,这意味着任何系列将只存在于三个分片中,当前热分片,当前冷分片和分片等待删除。

正则表达式是 /./,这意味着它可以匹配任何系列,而不仅仅是 'flight.' 系列。如果您只希望 CQ 在该分片 space.

中生成的那些系列,那么 /flight../ 可能是一个更好的正则表达式