Influxdb 结合XDB子查询数据上的最后和累积和
我有一些遥测数据如下所示:Influxdb 结合XDB子查询数据上的最后和累积和,influxdb,Influxdb,我有一些遥测数据如下所示: > select * from connected_users LIMIT 100 name: connected_users time event_id value ---- -------- ----- 1605485019101319658 13759 2 1605485299566004832 13759 0 1605490011182967926 13760 4 160549
> select * from connected_users LIMIT 100
name: connected_users
time event_id value
---- -------- -----
1605485019101319658 13759 2
1605485299566004832 13759 0
1605490011182967926 13760 4
1605490171409428188 13760 0
1605490207031398071 13760 7
1605490246151204709 13760 0
1605491054403726308 13761 1
1605491403050521520 13761 0
1605491433407347399 13762 2
1605491527773331816 13762 3
1605492020976088377 12884 1
1605492219827002782 13761 1
1605492613984911844 13763 1
1605492806683323942 13763 0
...
这些写入仅在事件发生更改时发生,即不是在固定的时间间隔内发生。我想写一个查询,它将为我提供所有事件ID上当前值每分钟的累计和。但是,因为我不能保证在之前的60秒内写入了新的数据值,所以我使用LAST来获取每个事件的最后设置
到目前为止,我做到了:
SELECT SUM(*) FROM
(SELECT LAST("value") FROM
"connected_users" WHERE
time <= now() AND
time >= now() - 3h
GROUP BY time(1m), "event_id" fill(previous))
GROUP BY time(1m)
但这似乎给了我一个比预期低得多的外部值,以及大量重复的时间条目,因此在输出数据中有大量重复条目
我可以看到内部查询是正确的,因为如果我单独运行它,我可以将输出数据堆叠在Grafana中,并在图中手动查看正确的总值。然而,我希望有一个单一的系列,而不是一组系列,我无法思考如何转换数据来做到这一点
编辑:要提供更多上下文,请执行以下操作:
这是内部查询Grafana,因此$timeFilter:
从连接的用户中选择lastvalue,其中$timeFilter GROUP BY time1m,event\u id fillprevious
这将生成一个我可以叠加的图表,并且是正确的:
然后,如果我再次将该内部查询包装为SUM和GROUP BY TIME1,我可以分离出单个序列:
从SelectLastValue中选择SUM*fromSelectLastValue fromConnected_用户,其中$timeFilter和event_id='9970'按时间1M分组,event_id按时间1M填充上一组
但是,如果我删除AND并尝试对所有序列值求和,我只会得到一个混乱的结果,可能是因为存在重复/重叠的时间值?最大值也低于预期值18,得到8:
从SelectLastValue中选择SUM*,其中$timeFilter GROUP BY time1m,event_id fillprevious GROUP BY time1m
当您在内部查询中仅选择一个serverId时,会是什么样子?此处添加的文本太多,因此我更新了原始问题,说明了在该场景中会发生什么:最后一个图形是整体图形,但标签是“按标记事件id配置”。我还将尝试显式地使用SUMlast。检查查询检查器,图形中的混乱可能是因为输入数据中的混乱,或者直接验证查询/结果是否流入XDB。当您在内部查询中仅选择一个serverId时会是什么样子?此处添加的文本太多,因此我用该场景中发生的情况更新了原始问题:最后一个图形是整体图形,但标签是按标记事件id配置的。我还将尝试显式地使用SUMlast。检查查询检查器,图形中的混乱可能是因为输入数据中的混乱,或者直接验证查询/XDB中的结果。