按星期几和一天中的时间过滤数据

问题描述 投票:0回答:1

我是 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 ))

任务将保存。我不明白我在这里做错了什么。我认为它一定是非常基本的,但我就是找不到它。我四处寻找,确实没有找到另一种方法来获得我需要的时间段,以及我在开始时需要的一点“软糖因素”。任何帮助将不胜感激。

谢谢。

influxdb
1个回答
0
投票

而且,我终于找到了问题所在,而且这是一个愚蠢的错误。 “等于”比较器是 == 而不是 =,这就是为什么它不理解我在那里的运算符。我修复了这个问题,并且查询工作得很好。

© www.soinside.com 2019 - 2024. All rights reserved.