從我上面關於嵌套函數的評論開始。
構建玩具例如:
INSERT disk,path="/mnt/disk1" total=30
INSERT disk,path="/mnt/disk2" total=32
INSERT disk,path="/mnt/disk3" total=33
:
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
然後,在推一些值:
CREATE DATABASE FOO
USE FOO
假設你的數據是每隔一段時間比 [1]每分鐘大於更新
並等待一分多鐘。然後:
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)
給出了相同的答案,而不是「無新數據」爲零。
在這裏,他們討論了InfluxDB中尚未普遍支持的嵌套函數。 https://github.com/influxdata/influxdb/issues/6823。建議的解決方法是爲一個值(例如總數)構建一個CQ並使用其他函數(例如last())查詢CQ。 – Jason