0

我对 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
    },
 ...

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

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

谢谢!

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

4

1 回答 1

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

我可以做类似的事情:

"spaces": [ { "name": "flight", "retentionPolicy": "1h", "shardDuration": "30m", "regex": "/.*/", "replicationFactor": 1, "split" : 1 }, ... 这会给我 1h 的保留时间和 30m 的分片持续时间?

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

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

于 2015-06-01T21:41:20.573 回答