我有一个系列disk,
,其中包含path
(/mnt/disk1
,/mnt/disk2
等)和total
磁盘空间。它还包含free
和used
值。这些值以指定的间隔更新。我想做的是查询以获得每条路径total
的{{1}}的总和。我还想对last()
和free
执行相同操作,以获取服务器上所有磁盘的总大小,可用空间和已用空间的总和。
我在这里有一个查询,它将获取所有磁盘的used
,按路径分组(为了区分):
last(total)
目前,这会返回5个系列,每个系列包含1行(最新)及其select last(total) as total from disk where path =~ /(mnt\/disk).*/ group by path
的值。然后我想要获取这些系列的总和,但我不能将total
包装到last(total)
函数调用中。有没有办法做到这一点,我错过了?
答案 0 :(得分:3)
继续上面关于嵌套函数的评论。
建立玩具示例:
CREATE DATABASE FOO
USE FOO
假设您的数据每隔大于 [1]的间隔更新一次:
CREATE CONTINUOUS QUERY disk_sum_total ON FOO
BEGIN
SELECT sum("total") AS "total_1m" INTO disk_1m_total FROM "disk"
GROUP BY time(1m)
END
然后推送一些值:
INSERT disk,path="/mnt/disk1" total=30
INSERT disk,path="/mnt/disk2" total=32
INSERT disk,path="/mnt/disk3" total=33
等一下多钟。然后:
INSERT disk,path="/mnt/disk1" total=41
INSERT disk,path="/mnt/disk2" total=42
INSERT disk,path="/mnt/disk3" total=43
再等一下。然后:
SELECT * FROM disk_1m_total
name: disk_1m_total
-------------------
time total_1m
1476015300000000000 95
1476015420000000000 126
这两个值为30+32+33=95
和41+42+43=126
。
从那里,查询是微不足道的:
SELECT last(total_1m) FROM disk_1m_total
name: disk_1m_total
-------------------
time last
1476015420000000000 126
希望有所帮助。
[1]小于更新频率的拣选间隔可防止轻微的时间抖动使得所有数据意外地对给定组进行两次求和。可能会有一些"零更新"间隔,但没有"重复计算"间隔。我通常会调用Shannon定理并以比更新快两倍的速度运行查询。如果CQ没有看到窗口的数据,则不会对该窗口执行CQ,因此last()
仍然会给出正确的答案。例如,我让CQ在一夜之间运行并且没有推送新数据:last(total_1m)
给出相同的答案,而不是零#34;没有新数据"。