我在一个名为" Power"的测量/表格中将放大器,伏特和瓦特存储在Influxdb中。更新频率大约每秒一次。我可以使用积分函数以小时为单位获得电源使用(以安培小时或瓦时为单位)。这非常好用,所以我可以得到一个24小时内每小时使用的功率图。我的SQL在下面。
问题是如果数据存在差距,那么当它返回时我会得到一个巨大的峰值。例如,如果数据从下午3点到下午5点45分丢失,则下午5点的结果显示出巨大的峰值。我可以看到的原因是差距接近3小时,因此它只计算图表下的面积并将其归为5 PM值。我可以避免吗?
SELECT INTEGRAL(Watts) FROM Power WHERE time > now() - 24h GROUP BY time(1h)
答案 0 :(得分:1)
您需要在查询的分组中使用fill()(请参阅Influx fill() usage的文档)。 在你的情况下,fill(none)或fill(0)应该完成这项工作。
答案 1 :(得分:1)
我对Influx也有类似的问题。事实证明,integral()
不支持fill()
,正如Yuri Lachin在评论中指出的那样。
由于无论如何都是按小时分组,因此该小时的平均功率(瓦特)等于该小时的能耗(瓦特-小时),因此您可以使用{{1 }}值在这里,您应该获得正确的结果。
我正在使用的查询是:
mean()
对于每日数字,我可以重新使用SELECT mean("load_power") AS "load"
FROM "power_readings"
WHERE $timeFilter
GROUP BY time(1h) fill(0)
,因为我很少会有跨越多天的数据空白,因此不需要填充符。
由于您可以在此查询中使用integral()
函数,因此可以决定哪种方法最有意义(请参阅https://docs.influxdata.com/influxdb/v1.7/query_language/data_exploration/#group-by-time-intervals-and-fill)