首页 文章

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

提问于
浏览
0

我试图创建一个连续的查询,但似乎忽略了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'子句被忽略 .

如何创建考虑上述条件的连续查询?至少,我如何只用一个连续查询提取有效轨道/ Headers 设置为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分钟的“窗口”,处理他们的一些数据,在此期间结束后丢弃数据但同时移动/复制到另一个可用于历史目的的长期数据库/系列 .

1 回答

  • 1

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

    我不知道你会想要什么GROUP BY,也许是 flight

    您可以在写入新系列时指定其他保留策略,但不能指定新数据库 . 在0.8中,系列的保留策略由系列名称上的正则表达式匹配确定 . 只要您正确选择系列名称,它就会进入您想要的保留策略 .

    编辑:新问题的更新

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

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

    我可以执行以下操作:“空格”:[{“name”:“flight”,“retentionPolicy”:“1h”,“shardDuration”:“30m”,“regex”:“/ . * /”,“replicationFactor “:1,”拆分“:1},......这会让我保留1小时,碎片持续时间为30米?

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

    正则表达式是/./,意味着它将匹配任何系列,而不仅仅是'flight.'系列 . 如果你只想要在那个碎片空间中由CQ生成的那些系列,那么/ flight ... /是一个更好的正则表达式 .

相关问题