使用InfluxDB,我尝试生成一个输出,显示从零开始的一段时间内的累积降雨量。
降雨量传感器输出累积降雨量,但在停电,重启等时重置为零。
我的第一个查询组件使用non_negative_difference()
来显示增量。
select
non_negative_difference(rain) as nnd
FROM
weather
WHERE
$time_query
....每个原始数据点产生一个增量,例如:
2018-06-01T14:21:00.926Z 0
2018-06-01T14:22:02.959Z 0.30000000000000426
2018-06-01T14:23:04.992Z 0.3999999999999986
2018-06-01T14:24:07.024Z 0.10000000000000142
2018-06-01T14:25:09.059Z 0.19999999999999574
2018-06-01T14:26:11.094Z 0
2018-06-01T14:27:13.127Z 0.10000000000000142
2018-06-01T14:28:15.158Z 0.20000000000000284
2018-06-01T14:29:20.027Z 0.09999999999999432
2018-06-01T14:30:22.476Z 0.10000000000000142
2018-06-01T14:30:53.918Z 0.6000000000000014
2018-06-01T14:31:55.968Z 0.5
2018-06-01T14:32:58.007Z 0.5
2018-06-01T14:34:00.046Z 0.20000000000000284
2018-06-01T14:35:02.075Z 0.3999999999999986
2018-06-01T14:36:04.102Z 0.3999999999999986
2018-06-01T14:37:06.136Z 0.20000000000000284
2018-06-01T14:38:08.201Z 0
到目前为止一切顺利。
我现在正试图将这些读数重新计算为累计总数,从预期的零点开始。
我可以使用cumulative_sum()
,例如:
SELECT
cumulative_sum(nnd)
FROM
(SELECT
non_negative_difference(rain) as nnd
FROM
weather
WHERE
$time_query )
产生:
2018-06-01T14:21:00.926Z 0
2018-06-01T14:22:02.959Z 0.30000000000000426
2018-06-01T14:23:04.992Z 0.7000000000000028
2018-06-01T14:24:07.024Z 0.8000000000000043
2018-06-01T14:25:09.059Z 1
2018-06-01T14:26:11.094Z 1
2018-06-01T14:27:13.127Z 1.1000000000000014
2018-06-01T14:28:15.158Z 1.3000000000000043
2018-06-01T14:29:20.027Z 1.3999999999999986
2018-06-01T14:30:22.476Z 1.5
2018-06-01T14:30:53.918Z 2.1000000000000014
2018-06-01T14:31:55.968Z 2.6000000000000014
2018-06-01T14:32:58.007Z 3.1000000000000014
2018-06-01T14:34:00.046Z 3.3000000000000043
2018-06-01T14:35:02.075Z 3.700000000000003
2018-06-01T14:36:04.102Z 4.100000000000001
2018-06-01T14:37:06.136Z 4.300000000000004
2018-06-01T14:38:08.201Z 4.300000000000004
看起来不错!
现在我想将它分组到更独特的时间段中,以获得漂亮的图形。
让我们试试......
SELECT
cumulative_sum(max(nnd))
FROM (SELECT
non_negative_difference(rain) as nnd
FROM
weather
WHERE
$time_query)
GROUP BY
time(5m)
我收到错误:ERR: aggregate function required inside the call to non_negative_difference
但是我找不到合理的方法来向non_negative_difference()
添加聚合和分组,这些方法不会影响差异函数本身的准确性。
我唯一能做的就是虚拟聚合SUM()随时间变化,小于传感器周期。但这并不足以满足我的喜好 - (我还不确定它是100%正确的)
我必须将两个查询都作为聚合查询吗?
答案 0 :(得分:0)
我正尝试为我的气象站执行此操作。我不想让气象站计算累计值,而是希望Grafana做到这一点。最有效的解决方案是Yuri Lachin在其评论中提到的高级语法。
使用InfluxDB,您可以使用CUMULATIVE_SUM()
,但是基本语法不允许您按时间分组(仅按标签分组)。但是,“高级语法”使您可以通过嵌套MEAN()
或SUM()
之类的聚合函数来获得时间序列。
这是我在Grafana中使用的功能,用于获取选定时间段内的累计降雨总量:
SELECT CUMULATIVE_SUM(MEAN("rainfall")) FROM "weather" WHERE $timeFilter GROUP BY time(1h) fill(0)
。
GROUP BY
当然是灵活的。我对每小时降雨量感兴趣,所以我按1小时分组。您可以按自己感兴趣的时间段进行分组。
使用此查询,在Grafana中选择的期间,降雨将从零开始。在西雅图地区,我们分别在2020年8月6日和2020年8月8日有可测量的降雨(我知道,令人震惊)。如果我将日期范围设置为包括两个日期,则该图显示的总降雨量不足0.2mm:
注意:我也对查看各个铲斗提示感兴趣,因此在第二个Y轴上将这些提示包括为条形。
有关更多详细信息,请参见:https://docs.influxdata.com/influxdb/v1.8/query_language/functions/#advanced-syntax-7