Flux查询中if条件用法及错误查询修正
修正后的Flux查询
data = from(bucket: "BJ") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r["_measurement"] == "REJECTCOUNTERS4") |> filter(fn: (r) => r["_field"] == "counterIN") |> filter(fn: (r) => r["line"] =~ /^${line:regex}$/) // 处理line为2l的情况 line2Data = data |> filter(fn: (r) => r["line"] == "2l") |> filter(fn: (r) => r["machine"] == "Cognex3") |> aggregateWindow(every: 1m, fn: last) |> difference(nonNegative: true) |> sum() // 处理其他情况,返回0 otherData = data |> filter(fn: (r) => r["line"] != "2l") |> map(fn: (r) => ({_time: r._time, _value: 0.0, _field: r._field, _measurement: r._measurement})) |> group() |> sum(column: "_value") // 合并结果 union(tables: [line2Data, otherData])
原查询的错误说明
- Flux不支持在管道链中直接使用
if分支语法,需通过拆分数据集、分别处理分支的方式实现逻辑 - 相等判断需使用
==,原代码中用=是赋值操作,不符合条件判断要求 - 无法直接用
return 0返回结果,必须通过map构造包含_value: 0.0的完整数据集,保证结构与正常查询结果一致
内容的提问来源于stack exchange,提问作者Sai Teja
相关产品推荐
相关产品推荐

