InfluxDB:如何创建连续查询来计算增量值?

InfluxDB:如何创建连续查询来计算增量值?,influxdb,Influxdb,我想计算XDB中存储的一系列测量值的增量值。这些数值是电表每5分钟读取的读数。这些值随时间而增加。下面是数据子集,让您了解在XDB CLI中执行以下命令: > SELECT "Haushaltstromzaehler - cnt" FROM "myhome_measurements" WHERE time >= '2018-02-02T10:00:00Z' AND time < '2018-02-02T11:00:00Z' name: myhome_measurements t

我想计算XDB中存储的一系列测量值的增量值。这些数值是电表每5分钟读取的读数。这些值随时间而增加。下面是数据子集,让您了解在XDB CLI中执行以下命令:

> SELECT "Haushaltstromzaehler - cnt" FROM "myhome_measurements" WHERE time >= '2018-02-02T10:00:00Z' AND time < '2018-02-02T11:00:00Z'
name: myhome_measurements
time                           Haushaltstromzaehler - cnt
----                           --------------------------
2018-02-02T10:00:12.610811904Z 11725.638
2018-02-02T10:05:11.242021888Z 11725.673
2018-02-02T10:10:10.689827072Z 11725.707
2018-02-02T10:15:12.143326976Z 11725.736
2018-02-02T10:20:10.753357056Z 11725.768
2018-02-02T10:25:11.18448512Z  11725.803
2018-02-02T10:30:12.922032896Z 11725.837
2018-02-02T10:35:10.618788096Z 11725.867
2018-02-02T10:40:11.820355072Z 11725.9
2018-02-02T10:45:11.634203904Z 11725.928
2018-02-02T10:50:11.10436096Z  11725.95
2018-02-02T10:55:10.753853952Z 11725.973
我挣扎的地方是让它在一个连续的查询中工作。下面是我用来设置连续查询的命令:

CREATE CONTINUOUS QUERY cq_Haushaltstromzaehler_cnt ON myhomedb 
BEGIN
    SELECT difference(sum("Haushaltstromzaehler - cnt")) AS "delta" INTO "Haushaltstromzaehler_delta" FROM "myhome_measurements" GROUP BY time(1h)
END
查看XDB日志文件,我发现在连续查询执行的新“增量”度量中没有写入任何数据:

...finished continuous query cq_Haushaltstromzaehler_cnt, 0 points(s) written...
经过大量的故障排除和实验,我现在明白了为什么不生成数据。设置连续查询需要使用GROUP BY time语句。这又需要在differences函数中使用聚合函数。现在的问题是,对于GROUPBY time指定的时间段,聚合函数只返回一个值。显然,differences函数不能仅计算一个值的差值。本质上,continuous query执行如下命令:

> SELECT difference(sum("Haushaltstromzaehler - cnt")) FROM "myhome_measurements" WHERE time >= '2018-02-02T10:00:00Z' AND time < '2018-02-02T11:00:00Z' GROUP BY time(1h)
>
我现在有些不知所措,不知道如何使这项工作顺利进行,并感谢您提供的任何建议。

不同之处


因此,可以在那里免费使用选择器功能-因为您的计数器似乎是累积的,最后一个应该可以正常工作。

使用最后一个聚合功能有帮助吗?还没有将其作为cq进行测试

Select difference(last(T1_Consumed)) AS T1_Delta, difference(last(T2_Consumed)) AS T2_Delta
from P1Data
where time >= 1551648871000000000 group by time(1h)

我忘了提到:这是XDB版本1.4.2可能会有帮助,使用累积总和这不起作用。这里是由连续查询CQ执行的InfluxQL语句:从myhome_测量值中选择DifferenceLasthaltstromzaehler-cnt,其中时间>='2017-12-01T10:00:00Z'和时间<'2017-12-01T11:00:00Z'按时间1h分组。问题是,当CQ执行时,它运行一个查询,查询从现在到现在的时间范围减去按时间间隔分组。。在CLI上,我可以指定时间范围大于GROUP BY time interval的WHERE子句。这就是生成上一个组的原因。我不能在CQ里这么做。
Select difference(last(T1_Consumed)) AS T1_Delta, difference(last(T2_Consumed)) AS T2_Delta
from P1Data
where time >= 1551648871000000000 group by time(1h)