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../ 可能是一个更好的正则表达式
我在 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../ 可能是一个更好的正则表达式