轉載請註明出處:
InfluxDB 連續查詢(Continuous Query)是一種自動化查詢型別,該查詢會根據定義的時間間隔定期執行,並將結果儲存在新的目標測量中。這樣的查詢通常用於處理大量時間序列資料。
使用語法格式:
CREATE CONTINUOUS QUERY <cq_name> ON <db_name>
BEGIN
SELECT <function>(<column>) INTO <target_measurement> FROM <source_measurement>
WHERE <time_clause> GROUP BY <tag_key>
END
其中:
<cq_name>
:為連續查詢指定一個名稱<db_name>
:為資料庫指定一個名稱<function>
:函數必須是 mean、sum、min、max 或 count 的其中之一<column>
:要執行聚合操作的列名<target_measurement>
:新建立的目標測量名稱<source_measurement>
:源測量名稱<time_clause>
:指定時間範圍的語句,可以包含 WHERE time > now() - <duration>
等<tag_key>
:可選引數,按照此 tag 進行分組操作在 InfluxDB 中建立連續查詢可以通過以下兩個步驟完成:
到
目標測量的查詢。取樣和資料保留
使用CQ與InfluxDB的保留策略(RP)來減輕儲存問題。結合CQ和RP自動將高精度資料降低到較低的精度,並從資料庫中移除可分配的高精度資料。常見用例的詳細演示指南,請參閱下取樣和資料保留
預先計算昂貴的查詢
通過使用CQ預先計算昂貴的查詢來縮短查詢執行時間。使用CQ自動將普通查詢的高精度資料下取樣到較低的精度。較低精度資料的查詢需要更少的資源並且返回更快。
替換HAVING子句
InfluxQL不支援HAVING子句。通過建立CQ來聚合資料並查詢CQ結果以達到應用HAVING子句相同的功能。
檢視連續查詢
SHOW CONTINUOUS QUERIES
刪除連續查詢:
從一個指定的database刪除CQ:
DROP CONTINUOUS QUERY <cq_name> ON <database_name>
DROP CONTINUOUS QUERY
返回一個空的結果。
修改連續查詢:
根據官網的介紹,建立CQ之後,無法進行更改,如果需要更改需要drop掉之後重新create。
CQ對實時資料進行操作。他們使用本地伺服器的時間戳,GROUP BY time()
間隔和InfluxDB的預設時間邊界來確定何時執行以及查詢中涵蓋的時間範圍。
CQs以與cq_query
的GROUP BY time()
間隔相同的間隔執行,並且它們在InfluxDB的預設時間邊界開始時執行。如果GROUP BY time()
間隔為1小時,則CQ每小時開始執行一次。
當CQ執行時,它對於now()
和now()
減去GROUP BY time()
間隔的時間範圍執行單個查詢。 如果GROUP BY time()
間隔為1小時,當前時間為17:00,查詢的時間範圍為16:00至16:59999999999。
CREATE CONTINUOUS QUERY "cq_basic" ON "transportation"
BEGIN
SELECT mean("passengers") INTO "average_passengers" FROM "bus_data" GROUP BY time(1h)
END
以上範例使用資料庫transportation
中的範例資料。measurementbus_data
資料儲存有關公共汽車乘客數量和投訴數量的15分鐘資料:
cq_basic
從bus_data
中計算乘客的平均小時數,並將結果儲存在資料庫transportation
中的average_passengers
中。
cq_basic
以一小時的間隔執行,與GROUP BY time()
間隔相同的間隔。 每個小時,cq_basic
執行一個單一的查詢,覆蓋了now()
和now()
減去GROUP BY time()
間隔之間的時間範圍,即now()
和now()
之前的一個小時之間的時間範圍。
假設我們有一個名為 cpu_usage
的測量,其中包含了多個 tag 和 field,我們需要將其聚合並寫入一個新的測量 cpu_usage_per_hour
中。
CREATE CONTINUOUS QUERY "cq_cpu_usage" ON "mydb"
BEGIN
SELECT MEAN("value") INTO "cpu_usage_per_hour" FROM "cpu_usage"
WHERE time > now() - 1h GROUP BY time(1h), "host"
END
該連續查詢會計算最近一小時內 cpu_usage
測量的平均值,並按照每小時以及 host
進行分組,結果儲存在 cpu_usage_per_hour
測量中。
可以使用以下命令檢視已建立的連續查詢列表:
SHOW CONTINUOUS QUERIES
https://docs.influxdata.com/influxdb/v1/query_language/continuous_queries/