全部產品
Search
文件中心

Lindorm:時序異常檢測

更新時間:Jul 06, 2024

本文介紹異常檢測演算法的概念和時序異常檢測的文法。

引擎與版本

時序異常檢測僅支援時序引擎。無版本要求。

使用限制

時序異常檢測必須和SAMPLE BY語句搭配使用。

功能簡介

時序異常檢測用於檢測指定時間軸上異常點的值,支援阿里達摩院自研的線上異常檢測演算法。異常檢測演算法在檢測過程中持續學習時序資料的特徵(例如資料趨勢或者周期),從而完成對新插入時序點的檢測。例如新插入的時序資料有一個非常大的尖刺,檢測結果可能為異常。

時序異常檢測搭配SAMPLE BY語句可以實現以下功能:

  • 搭配SAMPLE BY 0子句,針對每條時間軸上的資料逐點檢測。使用樣本,請參見樣本一樣本二樣本三

  • SAMPLE BY INTERVAL語句中指定降採樣粒度(INTERVAL),並嵌套降採樣運算元,如MIN、MAX、AVG、COUNT、SUM等,實現不同的計算效果。

    重要

    INTERVAL的值不能為0。

    使用樣本,請參見樣本四

  • 搭配SAMPLE BY 0子句,並嵌套部分非降採樣運算元,如LATEST、DELTA、RATE等,實現不同的查詢效果。使用樣本,請參見樣本五

文法

select_sample_by_statement ::=  SELECT ( select_clause )
                                FROM table_identifier
                                WHERE where_clause
                                SAMPLE BY 0
select_clause              ::=  selector [ AS identifier ] ( ',' selector [ AS identifier ] )
selector                   ::=  tag_identifier, | time | anomaly_detect '(' field_identifier ',' algo_identifier | model_identifier [ ',' options] ')'
where_clause               ::=  relation ( AND relation )* (OR relation)*
relation                   ::=  ( field_identifier| tag_identifier, ) operator term
operator                   ::=  '=' | '<' | '>' | '<=' | '>=' | '!=' | IN | CONTAINS | CONTAINS KEY

anomaly_detect代表時序異常檢測函數,相關參數說明如下:

參數

描述

field_identifier

Field列名。

說明

Field列的類型不能是VARCHAR和BOOLEAN類型。

algo_identifier

異常檢測演算法名稱。支援阿里達摩院自研線上異常檢測演算法。

  • esd:適用於尖刺型異常(例如監控曲線出現尖刺的現象),對於資料點中有少量顯著離群點的情況比較適用。

  • nsigma:原理簡單,便於分析異常原因。

  • ttest:用於識別一個時間視窗內時序指標是否存在因均值變化而發生的異常。

  • istl-esd:適用於帶周期性訊號的資料。

說明

algo_identifer參數適用於未開通資料庫內機器學習功能,但有使用時序異常檢測需求的情境。

model_identifier

模型名稱。

說明
  • model_identifier的類型為VARCHAR類型。

  • model_identifier參數僅適用於開通資料庫內機器學習功能後,使用時序異常檢測的情境。開通資料庫內機器學習的方法,請參見開通方式

options

調整異常檢測演算法的檢測效果。選擇性參數。格式為:key1=value1[, key2=value2]

演算法分類

時序引擎支援以下異常檢測演算法,演算法名稱和適用情境如下表:

演算法名稱

適用情境

esd

  • 檢測對象為單個資料點。

  • 適用於尖刺型異常。對於資料點中有少量顯著離群點的情況,檢測結果準確。

nsigma

  • 檢測對象為單個資料點。

  • 原理簡單,便於分析異常的原因,可解釋性較強。

說明

不建議在資料點中有少量顯著離群點的情境中使用,因為這種情況下計算的檢測值不準確可能導致檢測結果誤判。

ttest

  • 檢測對象為一段時間視窗內的時序資料。

  • 用於識別待檢測時間視窗內時序指標是否存在因均值變化而發生的異常。例如:檢測兩個時序數組(待檢測時間視窗和參考時間視窗)的均值是否有明顯差異。

    • 待檢測時間視窗:通過lenDetectWindow數組長度擷取待檢測時間視窗。

    • 參考時間視窗:通過lenHistoryWindow數組長度擷取參考時間視窗。

Incremental STL with ESD(簡稱istl-esd)

適用於周期性訊號。istl-esd演算法屬於達摩院自研OneShot STL(也稱Incremental STL)演算法。Incremental STL是可以即時增量地將周期訊號分解成周期項、趨勢項和殘餘項的演算法,需要對4個周期的訊號進行初始化。此檢測演算法中包含Incremental STL演算法和esd演算法,先用Incremental STL對訊號進行即時增量分解,再對殘餘項使用esd演算法檢測異常。通過對殘餘項進行esd演算法檢測,可以檢測到非周期性尖刺。

Incremental STL with Nsigma(簡稱istl-nsigma)

適用於周期性訊號。Incremental STL是可以即時增量地將周期訊號分解成周期項、趨勢項和殘餘項的演算法,需要對4個周期的訊號進行初始化。此檢測演算法中包含Incremental STL演算法和nsigma演算法,先用Incremental STL對訊號進行即時增量分解,再對殘餘項用nsigma檢測異常。通過對殘餘項進行nsigma檢測,可以檢測到非周期性尖刺。

演算法適用情境的曲線圖如下:

  • esd演算法:用於檢測每個時序點,適用於相對穩定的訊號中出現少量異常值的情境。image.png

  • nsigma演算法:用於檢測每個時序點,適用於異常點相對於歷史平均值有較大差異(通過演算法的參數n來調節)的情境。image.png

  • ttest演算法:用於檢測一段時間視窗內的時序資料。適用於以下兩個連續時間段內均值變化異常的情境。

    image.pngimage.png

  • istl-esd演算法:Incremental STL演算法用於檢測帶周期性訊號的時序資料。Incremental STL演算法會在去除未經處理資料的周期趨勢量後,對殘餘項使用esd演算法進行檢測。適用於相對穩定的周期訊號中出現少量異常值的情境。

    image.png

  • istl-nsigma演算法:Incremental STL演算法用於檢測帶周期性訊號的時序資料。Incremental STL演算法會在去除未經處理資料的周期趨勢量後,對殘餘項使用nsigma演算法進行檢測。適用於異常點相對於歷史平均值有較大差異的情境。image.png

參數說明

異常檢測演算法支援配置演算法參數,包括公用參數、訓練參數和推理參數。您可以通過調整選擇性參數options來實現不同的異常檢測效果。

說明
  • 公用參數、訓練參數和推理參數實際傳參時都是在同一個列表內指定。以ttest為例,傳參時可以指定為:lenDetectWindow=100,adhoc_stat=true

  • 如何通過調整參數得到理想的檢測結果,請參見統計類演算法參數調優分解類演算法參數調優

公用參數

通用的公用參數控制檢測過程中的調試診斷和行為,可以使用到所有的異常檢測演算法中。公用參數說明如下表:

參數名稱

類型

預設值

說明

verbose

BOOLEAN

FALSE

是否返回更多詳細資料,並標識目標列是否異常。具體返回的資訊由各演算法決定。取值如下:

  • TRUE

  • FALSE

取值為TRUE時,將會通過擴充列的形式,輸出詳細檢測結果,請參見表《verbose參數輸出詳情》。

adhoc_state

BOOLEAN

FALSE

是否將演算法的異常檢測狀態限制在本次查詢檢測中,有關異常檢測狀態的描述請參見異常檢測狀態

direction

VARCHAR

UP

檢測異常的方向。取值如下:

  • UP:只檢測時序資料升高的異常。

  • DOWN:只檢測時序資料降低的異常。

  • BOTH:檢測時序資料升高或者降低的異常。

verbose參數輸出詳情

演算法名稱

擴充列名稱

類型

取值

說明

esd

anomaly

BOOLEAN

  • TRUE

  • FALSE

  • TRUE:當前資料點異常。

  • FALSE:當前資料點正常。

anomalyLevel

STRING

  • NORMAL

  • UNKNOW

  • NORMAL:當前資料點無異常。

  • UNKNOW:當前資料點異常,異常程度未分級。

detectedDirection

STRING

  • UP

  • DOWN

  • NONE

  • UP:當前資料點大於視窗統計值,異常向上。

  • DOWN:當前資料點小於視窗統計值,異常向下。

  • NONE:當前資料點無異常,且anomaly取值為FALSE。

anomalyScore

DOUBLE

[0, Double.MAX_VALUE]

取值越大,當前資料點的異常越明顯。

threshold

DOUBLE

[0, Double.MAX_VALUE]

判斷閾值,用於判斷當前資料點是否異常。

當anomalyScore取值大於threshold的取值時,當前資料點異常;anomalyScore取值小於threshold的取值時,當前資料點正常。

threshold由輸入參數alpha與lenHistoryWindow計算得到,alpha越小,threshold越大;lenHistoryWindow越大,threshold越大。

upperBound

DOUBLE

DOUBLE類型的全部取值範圍

觸發異常檢測的上邊界值。

例如,在輸入參數中設定maxAnomalyRatio=0.3時,upperBound為觀察視窗內有序資料的70%分布值(1 - maxAnomalyRatio),即觀察視窗內小於upperBound(70%)的資料點不參與異常檢測。

說明

視窗長度由參數lenHistoryWindow指定。

如果資料點落在[lowerBound, upperBound]區間內,演算法將判定該點為正常點;如果資料點未落在 [lowerBound, upperBound] 區間內,將會觸發演算法為該資料點計算anomalyScore。若結果滿足anomalyScore>threshold,演算法將判定該點為異常點。

lowerBound

DOUBLE

DOUBLE類型的全部取值範圍

觸發異常檢測的下邊界值。

例如,在輸入參數中設定maxAnomalyRatio=0.3時,lowerBound為觀察視窗內有序資料的30%分布值(maxAnomalyRatio),即觀察視窗內大於lowerBound(30%)的資料不參與異常檢測。

說明

視窗長度由參數lenHistoryWindow指定。

如果資料點落在 [lowerBound, upperBound]區間內,演算法將判定該點為正常點;如果資料點未落在[lowerBound, upperBound]區間內,將會觸發演算法為該點計算anomalyScore。若結果滿足anomalyScore>threshold,演算法將判定該點為異常點。

mean

DOUBLE

DOUBLE類型的全部取值範圍

觀察視窗內資料的平均值。

median

DOUBLE

DOUBLE類型的全部取值範圍

觀察視窗內資料的中位元。

std

DOUBLE

DOUBLE類型的全部取值範圍

觀察視窗內資料的標準差。

latestTimestamp

LONG

正整數

觀察視窗內最新資料點的時間戳記。

warmup

BOOLEAN

  • TRUE

  • FALSE

  • TRUE:演算法處於初始化階段(不會執行異常檢測)。

  • FALSE:演算法已完成初始化。

ttest

anomaly

BOOLEAN

  • TRUE

  • FALSE

  • TRUE:當前資料點異常。

  • FALSE:當前資料點正常。

anomalyLevel

STRING

  • NORMAL

  • UNKNOW

  • NORMAL:當前資料點無異常。

  • UNKNOW:當前資料點異常,異常程度未分級。

detectedDirection

STRING

  • UP

  • DOWN

  • NONE

  • UP:當前資料點大於視窗統計值,異常向上。

  • DOWN:當前資料點小於視窗統計值,異常向下。

  • NONE:當前資料點無異常,且anomaly取值為FALSE

pValue

DOUBLE

(0, 1)

當前資料點偏離視窗統計值的程度。取值越小,偏離程度越大;取值越大,偏離程度越小。

threshold

DOUBLE

(0, 1)

判斷閾值,用於判斷當前資料點是否異常。

  • pValue的取值小於threshold取值時,當前資料點異常。

  • pValue的取值大於threshold取值時,當前資料點正常。

trendScore

DOUBLE

DOUBLE類型的全部取值範圍

表徵趨勢變化的程度。絕對值越大,趨勢變化越明顯。

  • trendScore>0:趨勢為上升。

  • trendScore<0:趨勢為下降。

mean

DOUBLE

DOUBLE類型的全部取值範圍

觀察視窗內資料的平均值。觀察視窗的長度由輸入參數lenHistoryWindow指定。

std

DOUBLE

DOUBLE類型的全部取值範圍

觀察視窗內資料的標準差。

latestTimestamp

LONG

正整數

觀察視窗內最新資料點的時間戳記。

warmup

BOOLEAN

  • TRUE

  • FALSE

  • TRUE:演算法處於初始化階段(不會執行異常檢測)。

  • FALSE:演算法已完成初始化。

nsigma

anomaly

BOOLEAN

  • TRUE

  • FALSE

  • TRUE:當前資料點異常。

  • FALSE:當前資料點正常。

anomalyLevel

STRING

  • NORMAL

  • UNKNOW

  • NORMAL:當前資料點無異常。

  • UNKNOW:當前資料點異常,異常程度未分級。

detectedDirection

STRING

  • UP

  • DOWN

  • NONE

  • UP:當前資料點大於視窗統計值,異常向上。

  • DOWN:當前資料點小於視窗統計值,異常向下。

  • NONE:當前資料點無異常,且anomaly取值為FALSE

anomalyScore

DOUBLE

[0,Double.MAX_VALUE]

取值越大,當前資料點的異常越明顯。

threshold

DOUBLE

[0,Double.MAX_VALUE]

取值為判斷閾值,用於判斷當前資料點是否異常。

當anomalyScore取值大於threshold的取值時,當前資料點異常;anomalyScore取值小於threshold的取值時,當前資料點正常。

mean

DOUBLE

DOUBLE類型的全部取值範圍

觀察視窗內資料的平均值。

std

DOUBLE

DOUBLE類型的全部取值範圍

觀察視窗內資料的標準差。

latestTimestamp

LONG

正整數

觀察視窗內最新資料點的時間戳記。

warmup

BOOLEAN

  • TRUE

  • FALSE

  • TRUE:演算法處於初始化階段(不會執行異常檢測)。

  • FALSE:演算法已完成初始化。

istl-esd

anomaly

BOOLEAN

  • TRUE

  • FALSE

  • TRUE:當前資料點異常。

  • FALSE:當前資料點正常。

anomalyLevel

STRING

  • NORMAL

  • UNKNOW

  • NORMAL:當前資料點無異常。

  • UNKNOW:當前資料點異常,異常程度未分級。

residual

DOUBLE

DOUBLE類型的全部取值範圍

未經處理資料去除周期性分量和趨勢性分量後剩餘的殘值。

在istl演算法中,資料點會被分解,且滿足未經處理資料=residual+trend+season

在演算法初始化階段,即warmup取值為TRUE時,只輸出固定預設值0。

trend

DOUBLE

DOUBLE類型的全部取值範圍

未經處理資料中的趨勢性分量。

在演算法初始化階段,即warmup取值為TRUE時,只輸出固定預設值0。

season

DOUBLE

DOUBLE類型的全部取值範圍

未經處理資料中的周期性分量。

在演算法初始化階段,即warmup取值為TRUE時,只輸出固定預設值0。

warmup

BOOLEAN

  • TRUE

  • FALSE

  • TRUE:演算法處於初始化階段(不會執行異常檢測)。

    說明

    初始化過程需要4個周期長度的資料輸入。在此期間,演算法輸出的residual、trend、season均為無效值,預設輸出0。

  • FALSE:演算法已完成初始化。

剩餘擴充列, 均與esd演算法的詳情輸出一致

與esd的輸出資訊的類型相同

與esd輸出資訊的取值範圍相同

調用異常檢測函數時,如果輸入參數包含esd.verbose=true,則開啟esd verbose模式。

當verbose模式開啟時,附帶輸出esd/ttest演算法中所有的verbose資訊(不包括anomaly、warmup與anomalyLevel)。

istl-nsigma

anomaly

BOOLEAN

  • TRUE

  • FALSE

  • TRUE:當前資料點異常。

  • FALSE:當前資料點正常。

anomalyLevel

STRING

  • NORMAL

  • UNKNOW

  • NORMAL:當前資料點無異常。

  • UNKNOW:當前資料點異常,異常程度未分級。

trend

DOUBLE

DOUBLE類型的全部取值範圍

未經處理資料中的趨勢性分量。

在演算法初始化階段,即warmup取值為TRUE時,只輸出固定預設值0。

season

DOUBLE

DOUBLE類型的全部取值範圍

未經處理資料中的周期性分量。

在演算法初始化階段,即warmup取值為TRUE時,只輸出固定預設值0。

residual

DOUBLE

DOUBLE類型的全部取值範圍

未經處理資料去除周期性分量和趨勢性分量後剩餘的殘值。

在演算法初始化階段,即warmup取值為TRUE時,只輸出固定預設值0。

warmup

BOOLEAN

  • TRUE

  • FALSE

  • TRUE:演算法處於初始化階段(不會執行異常檢測)。

    說明

    初始化過程需要4個周期長度的資料輸入。在此期間,演算法輸出的residual、trend、season均為無效值,預設輸出0。

  • FALSE:演算法已完成初始化。

剩餘擴充列, 均與nsigma演算法的詳情輸出一致

nsigma演算法的輸出資訊的類型相同

與nsigma演算法輸出資訊的取值範圍相同

調用異常檢測函數時,如果輸入參數包含nsigma.verbose=true,則開啟nsigma verbose模式。

訓練參數

使用異常檢測演算法時,指定演算法名稱和訓練參數會確定一個具體的異常檢測演算法模型。訓練參數在Lindorm時序引擎重啟後會失效,需要重新對資料點進行訓練(訓練的操作是檢測過程中即時適應時序資料的特性)。

說明

配置訓練參數時需要注意以下幾點:

  • 參數名稱不區分大小寫。

  • 參數值的類型支援數值、布爾和字串,不支援NULL等特殊值。

  • 參數值必須在指定的取值範圍內。

演算法名稱

參數名稱

類型

取值

說明

esd

compression

INTEGER

正整數,預設值為100,取值範圍為(10,1000)

演算法中資料結構的空間複雜度。參數值越大演算法在運行過程中越佔用記憶體,但是演算法結果越準確。

lenHistoryWindow

INTEGER

正整數,預設值為null,取值≥20。

演算法參考的時間視窗長度。如果時間視窗長度比較短,計算過程中只會將最近的資料點作為參考值。當lenHistoryWindow=null時,表示沒有指定參考的時間視窗長度,此時會用第一次檢測以來的所有時間點作為參考的時間視窗長度。

nsigma

lenHistoryWindow

INTEGER

正整數,預設值為null,取值≥20。

演算法參考的時間視窗長度。如果時間視窗長度比較短只會參考最近的資料點作為參考值。當lenHistoryWindow=null時,表示沒有指定參考的時間視窗長度,此時會用第一次檢測以來的所有時間點作為參考的時間視窗長度。

ttest

lenDetectWindow

INTEGER

正整數,預設值為10。

待檢測的最近的時間視窗的長度。

lenHistoryWindow

INTEGER

正整數,預設值為100,取值≥20。

演算法參考的時間視窗長度。如果時間視窗長度比較短,計算過程中只會將最近的資料點作為參考值。當lenHistoryWindow=null時,表示沒有指定參考的時間視窗長度,此時會用第一次檢測以來的所有時間點作為參考的時間視窗長度。

說明

此參數值必須大於lenDetectWindow參數值。

istl-esd

frequency

VARCHAR

用數字和時間單位表示的字串。例如5M、24H、1D。

表示時間單位的有效取值及含義:

  • n/ns:納秒

  • u/us:微秒

  • m/ms:毫秒

  • s/S:秒

  • M/min:分鐘

  • H/h:小時

  • D/d:天

時間序列的採集頻率。例如每小時一個點則frequency=1H

重要
  • 如果未設定該參數,演算法會自動分析採集頻率(但當時間序列中的缺失值過多時,可能會影響分析的準確率)。

  • 如果需設定該參數,frequency的值必須和SAMPLE BY INTERVAL語句中設定的INTERVAL的值一致。

periods

VARCHAR

用數字和時間單位表示的字串。例如5M、24H、1D。

表示時間單位的有效取值及含義如下:

  • n/ns:納秒

  • u/us:微秒

  • m/ms:毫秒

  • s/S:秒

  • M/min:分鐘

  • H/h:小時

  • D/d:天

周期訊號的所有周期長度。可以通過索引符傳遞多個周期長度。例如:periods[0]=1440periods[1]=1880

說明

如果未設定該參數,演算法會自動檢測周期。

esd.*

不涉及

定義esd演算法所需的訓練參數,請參考esd演算法的訓練參數。使用時通過添加esd.首碼進行關聯到esd演算法參數。例如:esd.lenHistoryWindow=10

istl-nsigma

frequency

VARCHAR

用數字和時間單位表示的字串。例如5M、24H、1D。

表示時間單位的有效取值及含義如下:

  • n/ns:納秒

  • u/us:微秒

  • m/ms:毫秒

  • s/S:秒

  • M/min:分鐘

  • H/h:小時

  • D/d:天

時間序列的採集頻率。例如frequency=1H表示每小時採集一個點。

重要
  • 如果未設定該參數,演算法會自動分析採集頻率(但當時間序列中的缺失值過多時,可能會影響分析的準確率)。

  • 如果需設定該參數,frequency的值必須和SAMPLE BY INTERVAL語句中設定的INTERVAL的值一致。

periods

VARCHAR

用數字和時間單位表示的字串。例如5M、24H、1D。

表示時間單位的有效取值及含義如下:

  • n/ns:納秒

  • u/us:微秒

  • m/ms:毫秒

  • s/S:秒

  • M/min:分鐘

  • H/h:小時

  • D/d:天

周期訊號的所有周期長度。可以通過索引符傳遞多個周期長度。例如:periods[0]=1440periods[1]=1880

說明

如果未設定該參數,演算法會自動檢測周期。

nsigma.*

不涉及

定義nsigma演算法所需的訓練參數,請參考nsigma演算法的訓練參數。使用時通過添加nsigma.首碼進行關聯到nsigma演算法參數。例如:nsigma.lenHistoryWindow=10

推理參數

推理參數只在檢測時起作用,且參數名稱大小寫不敏感。

演算法名稱

參數名稱

類型

取值

說明

esd

alpha

DOUBLE

預設值為0.1,取值範圍為(0,1)

異常檢測的敏感程度。參數值越大,對異常檢測越敏感,會報出比較多的異常。

direction

VARCHAR

預設值為Up。

檢測異常的方向。

  • Up:只檢測時序資料升高的異常。

  • Down:只檢測時序資料降低的異常。

  • Both:檢測時序資料升高或者降低的異常。

maxAnomalyRatio

DOUBLE

預設值為0.3,取值範圍為(0,1]。取1時表示不過濾任何異常。

最大的異常比例。例如:當maxAnomalyRatio=0.3並且direction=Up時,表示值小於第70百分位元的點不會被認為是異常。

  • 當direction=Up時,通過該參數可以過濾掉值比較小的點。

  • 當direction=Down時,通過該參數可以過濾掉值比較大的點。

warmupCount

INTEGER

正整數,預設值為20。

至少需要多少個點才會開始報異常。例如:warmupCount=20表示資料點小於20個不會報異常。

nsigma

n

DOUBLE

非零浮點數,預設值為3.0。

  • n>0:表示當前值減去均值大於n個標準差的時候會報異常。

  • n<0:表示均值減去當前值大於n個標準差的時候會報異常。

warmupCount

INTEGER

正整數,預設值為20。

至少需要多少個點才會報異常。例如:warmupCount=20表示資料點小於20個不會報異常。

ttest

alpha

DOUBLE

預設值為0.05,取值範圍為(0,1)

異常檢測的敏感程度。參數值越大,對異常檢測越敏感,會報出比較多的異常。

direction

VARCHAR

預設為Up。

檢測異常的方向。

  • Up:只檢測時序資料升高的異常。

  • Down:只檢測時序資料降低的異常。

  • Both:檢測時序資料升高或者降低的異常。

istl-esd

esd.*

不涉及

定義esd演算法所需的推理參數,請參考esd演算法的推理參數。使用時通過esd.進行關聯。例如:esd.direction=Both

istl-nsigma

nsigma.*

不涉及

定義nsigma演算法所需的推理參數,請參考nsigma演算法的推理參數。使用時通過nsigma.進行關聯。例如:nsigma.n=5

樣本

  • 樣本1:對時序資料表sensor中指定時間範圍的溫度使用esd演算法進行時序異常檢測。

    SELECT device_id, region, time, anomaly_detect(temperature, 'esd') AS detect_result FROM sensor WHERE time >= '2022-01-01 00:00:00' and time < '2022-01-01 00:01:00' SAMPLE BY 0;

    返回結果如下:

    +-----------+----------+---------------------------+---------------+
    | device_id |  region  |           time            | detect_result |
    +-----------+----------+---------------------------+---------------+
    | F07A1260  | north-cn | 2022-01-01T00:00:00+08:00 | true          |
    | F07A1260  | north-cn | 2022-01-01T00:00:01+08:00 | false         |
    | F07A1260  | north-cn | 2022-01-01T00:00:02+08:00 | true          |
    | F07A1261  | south-cn | 2022-01-01T00:00:00+08:00 | false         |
    | F07A1261  | south-cn | 2022-01-01T00:00:01+08:00 | false         |
    | F07A1261  | south-cn | 2022-01-01T00:00:02+08:00 | false         |
    | F07A1261  | south-cn | 2022-01-01T00:00:03+08:00 | false         |
    +-----------+----------+---------------------------+---------------+
  • 樣本2:對時序資料表sensor中F07A1260裝置指定時間範圍的溫度使用esd演算法進行時序異常檢測。

    SELECT device_id, region, time, anomaly_detect(temperature, 'esd') AS detect_result FROM sensor WHERE device_id in ('F07A1260') and time >= '2022-01-01 00:00:00' and time < '2022-01-01 00:01:00' SAMPLE BY 0;

    返回結果如下:

    +-----------+----------+---------------------------+---------------+
    | device_id |  region  |           time            | detect_result |
    +-----------+----------+---------------------------+---------------+
    | F07A1260  | north-cn | 2022-01-01T00:00:00+08:00 | true          |
    | F07A1260  | north-cn | 2022-01-01T00:00:01+08:00 | false         |
    | F07A1260  | north-cn | 2022-01-01T00:00:02+08:00 | true          |
    +-----------+----------+---------------------------+---------------+
  • 樣本3:對時序資料表sensor中F07A1260裝置指定時間範圍的溫度使用esd演算法進行時序異常檢測,同時指定演算法參數。

    SELECT device_id, region, time, anomaly_detect(temperature, 'esd', 'lenHistoryWindow=30,maxAnomalyRatio=0.1') AS detect_result FROM sensor WHERE device_id in ('F07A1260') and time >= '2022-01-01 00:00:00' and time < '2022-01-01 00:01:00' SAMPLE BY 0;

    返回結果如下:

    +-----------+----------+---------------------------+---------------+
    | device_id |  region  |           time            | detect_result |
    +-----------+----------+---------------------------+---------------+
    | F07A1260  | north-cn | 2022-01-01T00:00:00+08:00 | false         |
    | F07A1260  | north-cn | 2022-01-01T00:00:01+08:00 | false         |
    | F07A1260  | north-cn | 2022-01-01T00:00:02+08:00 | true          |
    +-----------+----------+---------------------------+---------------+
  • 樣本4:與降採樣運算元MAX嵌套使用,降採樣粒度為1分鐘。

    SELECT time, anomaly_detect(max(temperature), 'esd') AS ad_result, max(temperature) AS rawVal FROM sensor SAMPLE BY 1m;

    返回結果如下:

    +---------------------------+-----------+-------------+
    |           time            | ad_result |   rawVal    |
    +---------------------------+-----------+-------------+
    | 2022-04-12T06:00:00+08:00 | null      | 923091.3175 |
    | 2022-04-11T08:00:00+08:00 | null      | 8035700     |
    | 2022-04-11T09:00:00+08:00 | null      | 8035690.25  |
    | 2022-04-11T10:00:00+08:00 | null      | 3306277.545 |
    | 2022-04-11T11:00:00+08:00 | null      | 5921167.787 |
    | 2022-04-11T12:00:00+08:00 | null      | 833541.304  |
    +---------------------------+-----------+-------------+
  • 樣本5:與非降採樣運算元LATEST嵌套使用,降採樣粒度為0。

    SELECT time, anomaly_detect(latest(temperature), 'esd') AS ad_result, latest(temperature) AS latestVal FROM sensor SAMPLE BY 0;

    返回結果如下:

    +---------------------------+-----------+-------------+
    |           time            | ad_result |  latestVal  |
    +---------------------------+-----------+-------------+
    | 2022-04-12T06:00:00+08:00 | false     | 923091.3175 |
    | 2022-04-13T07:00:00+08:00 | false     | 8037506.75  |
    | 2022-04-13T07:00:00+08:00 | false     | 50490.2     |
    +---------------------------+-----------+-------------+