介紹 TDgpt 內置時序數據異常檢測模型
TDengine 中定義了異常(狀態)窗口來提供異常檢測服務。異常窗口可以視為一種特殊的事件窗口(Event Window),即異常檢測算法確定的連續異常時間序列數據所在的時間窗口。與普通事件窗口區別在于,時間窗口的起始時間和結束時間均由分析算法識別確定,不通過用戶給定的表達式進行判定。因此,在 WHERE
子句中使用 ANOMALY_WINDOW
關鍵詞即可調用時序數據異常檢測服務,同時窗口偽列(_WSTART
、_WEND
、_WDURATION
)也能夠像其他時間窗口一樣用于描述異常窗口的起始時間 (_WSTART
)、結束時間 (_WEND
)、持續時間 (_WDURATION
)。例如:
--- 使用異常檢測算法 IQR 對輸入列 col_val 進行異常檢測。同時輸出異常窗口的起始時間、結束時間、以及異常窗口內 col 列的和。
SELECT _wstart, _wend, SUM(col)
FROM foo
ANOMALY_WINDOW(col_val, "algo=iqr");
如下圖所示,Anode 將返回時序數據異常窗口 [10:51:30, 10:53:40]
在此基礎上,用戶可以針對異常窗口內的時序數據進行查詢聚合、變換處理等操作。
語法
ANOMALY_WINDOW(column_name, option_expr)option_expr: {"
algo=expr1
[,wncheck=1|0]
[,expr2]
"}
column_name
:進行時序數據異常檢測的輸入數據列,當前只支持單列,且只能是數值類型,不能是字符類型(例如:NCHAR
、VARCHAR
、VARBINARY
等類型),不支持函數表達式。options
:字符串。其中使用 K=V 調用異常檢測算法及與算法相關的參數。采用逗號分隔的 K=V 字符串表示,其中的字符串不需要使用單引號、雙引號、或轉義號等符號,不能使用中文及其他寬字符。例如:algo=ksigma,k=2
表示進行異常檢測的算法是 ksigma,該算法接受的輸入參數是 2。- 異常檢測的結果可以作為外層查詢的子查詢輸入,在
SELECT
子句中使用的聚合函數或標量函數與其他類型的窗口查詢相同。 - 輸入數據默認進行白噪聲檢查,如果輸入數據是白噪聲,將不會有任何(異常)窗口信息返回。
參數說明
參數 | 含義 | 默認值 |
---|---|---|
algo | 異常檢測調用的算法 | iqr |
wncheck | 對輸入數據列是否進行白噪聲檢查,取值為 0 或 1 | 1 |
示例
--- 使用 iqr 算法進行異常檢測,檢測列 i32 列。
SELECT _wstart, _wend, SUM(i32)
FROM foo
ANOMALY_WINDOW(i32, "algo=iqr");--- 使用 ksigma 算法進行異常檢測,輸入參數 k 值為 2,檢測列 i32 列
SELECT _wstart, _wend, SUM(i32)
FROM foo
ANOMALY_WINDOW(i32, "algo=ksigma,k=2");taos> SELECT _wstart, _wend, count(*) FROM foo ANOMAYL_WINDOW(i32);_wstart | _wend | count(*) |
====================================================================2020-01-01 00:00:16.000 | 2020-01-01 00:00:17.000 | 2 |
Query OK, 1 row(s) in set (0.028946s)
內置異常檢測算法
分析平臺內置了 6 個異常檢查模型,分為 3 個類別,分別是 基于統計學的算法、基于數據密度的算法、以及基于機器學習的算法。在不指定異常檢測使用的方法的情況下,默認調用 IQR 進行異常檢測。