我是 Flux 和 InfluxDB 的新手。我一直在努力整理从 SCADA 系统中引入的一些数据,并将其转换为与我们从电力供应商处计费的方式相对应的单位。
我配置了一项任务,将两分钟的数据压缩为全天 30 分钟的平均值。此任务在每小时、每天、每月和每周的第 0 分钟和第 30 分钟运行,从我将原始数据推送到的存储桶中获取数据,对前 30 分钟的数据进行平均,然后将其推送到称为 SCADA_Integrated 的新存储桶,通常在每小时 0 分和 30 分的几秒内。
现在,我想编写另一个任务,该任务将查看 SCADA_Integrated 中的数据并对其进行过滤,以便仅包含我们的电力提供商使用的计费周期内的数据。这包括周一至周六的 30 分钟间隔,从中午开始到晚上 10:00 结束。但是,我不能只使用常规的 hourSelection() 函数来执行此操作,因为我的间隔平均数据是在代表间隔结束的半小时后几秒钟写入的。例如,时间戳为 12:00:02 的时间间隔不应出现在我获取的数据中,因为它实际上是 11:30 - 12:00 之间的值的平均值。而且,我需要获取时间戳为 22:00:03 的时间间隔,因为它包含 21:30 - 22:00 之间的数据。
为了尝试评估这一点,我编写了以下查询:
import "date"
option task = {name: "System TPP-MCL Filter", cron: "0,30 * * * *"}
from(bucket: "SCADA_Integrated")
|> range(start: -30m)
|> filter(
fn: (r) =>
r._measurement == "System RTU" and r._field == "kW_CV" and r.point_id == "Total System kVA"
)
|> filter(fn: (r) =>
date.weekDay(t: r._time) >= 1 and
date.weekDay(t: r._time) <= 6 and
( date.hour(t: r._time) > 12 or ( date.hour(t: r._time) = 12 and date.minute(t: r._time) >= 1 )) and
( date.hour(t: r._time) < 22 or ( date.hour(t: r._time) = 22 and date.minute(t: r._time) <= 1 ))
)
|> to(bucket: "SCADA_TPP-MCL")
但是,当我尝试保存此内容时,出现错误:
更新任务失败:loc 0:0-0:0:未知运算符“
”
如果我删除这两行:
( date.hour(t: r._time) > 12 or ( date.hour(t: r._time) = 12 and date.minute(t: r._time) >= 1 )) and
( date.hour(t: r._time) < 22 or ( date.hour(t: r._time) = 22 and date.minute(t: r._time) <= 1 ))
任务将保存。我不明白我在这里做错了什么。我认为它一定是非常基本的,但我就是找不到它。我四处寻找,确实没有找到另一种方法来获得我需要的时间段,以及我在开始时需要的一点“软糖因素”。任何帮助将不胜感激。
谢谢。
而且,我终于找到了问题所在,而且这是一个愚蠢的错误。 “等于”比较器是 == 而不是 =,这就是为什么它不理解我在那里的运算符。我修复了这个问题,并且查询工作得很好。