本文介紹時序SQL中支援的常用函數和使用樣本。
引擎與版本
常用時序函數列表
函數 | 說明 |
擷取系統當前已耗用時間。 | |
計算時序資料表中Field列的和。 | |
計算時序資料表中Field列的平均值。 | |
統計時序資料表中Field列值的個數。 | |
查詢時序資料表中Field列的最小值。 | |
查詢時序資料表中Field列的最大值。 | |
擷取時序資料表中Field列的第一個值。 | |
擷取時序資料表中Field列的最後一個值。 | |
計算時序資料表中與Field列關聯的第P個百分位欄位值。 | |
計算時序資料表中Field列值的斜率。 | |
計算時序資料表中Field列的值與前一行對應值的差。 | |
擷取時序資料表中Field列的最新的N條資料。 | |
對時序資料表中Field列進行時序異常檢測。 | |
對時序資料表中Field列進行特徵分箱。 |
資料準備
假設樣本表sensor的結構如下:
+-------------+-----------+------------+
| columnName | typeName | columnKind |
+-------------+-----------+------------+
| device_id | VARCHAR | TAG |
| region | VARCHAR | TAG |
| time | TIMESTAMP | TIMESTAMP |
| temperature | DOUBLE | FIELD |
| humidity | DOUBLE | FIELD |
+-------------+-----------+------------+表中資料如下:
+-----------+----------+---------------------------+-------------+-----------+
| device_id | region | time | temperature | humidity |
+-----------+----------+---------------------------+-------------+-----------+
| F07A1260 | north-cn | 2021-04-22T15:33:00+08:00 | 12.100000 | 45.000000 |
| F07A1260 | north-cn | 2021-04-22T15:33:10+08:00 | 13.200000 | 47.000000 |
| F07A1260 | north-cn | 2021-04-22T15:33:20+08:00 | 10.600000 | 46.000000 |
| F07A1261 | south-cn | 2021-04-22T15:51:20+08:00 | 12.100000 | 51.000000 |
| F07A1261 | south-cn | 2021-04-22T15:51:21+08:00 | 13.200000 | 52.000000 |
| F07A1261 | south-cn | 2021-04-22T15:51:27+08:00 | 10.600000 | 53.000000 |
| F07A1261 | south-cn | 2021-04-22T15:51:47+08:00 | 20.600000 | 55.000000 |
+-----------+----------+---------------------------+-------------+-----------+共包含以下兩條時間軸:
時間軸1:Tag為
device_id=F07A1260, region=north-cn。Field為temperature、humidity。時間軸2:Tag為
device_id=F07A1261, region=south-cn。Field為temperature、humidity。
關於時間軸的概念,請參見基本概念。
時間處理函數
CURRENT_TIMESTAMP函數
說明
擷取系統當前已耗用時間。
文法
CURRENT_TIMESTAMPCURRENT_TIMESTAMP無參數,使用時直接通過關鍵字
CURRENT_TIMESTAMP調用即可。CURRENT_TIMESTAMP函數返回的時間戳記精確至毫秒,例如
2023-04-23T21:13:15.819+08:00。CURRENT_TIMESTAMP函數返回的是UTC+8格式的Lindorm執行個體服務端的系統時間,使用該函數前請確認系統時間是否滿足業務需求。
請盡量避免在實際業務寫入資料時直接使用該函數的返回結果。建議在開發測試中需要大規模產生測試資料的情境下使用CURRENT_TIMESTAMP函數。
樣本
在sensor表中插入一條資料,TAG為device_id=F07A1262, region=north-cn,時間戳記為資料寫入的目前時間。
INSERT INTO sensor(device_id,region,time,temperature,humidity) VALUES ('F07A1262','north-cn',CURRENT_TIMESTAMP,19.9,42);彙總函式
SUM函數
說明
計算時序資料表中Field列的和。
文法
SUM(field_name)SUM的傳回型別為DOUBLE或長整型BIGINT。
參數
參數 | 描述 |
field_name | Field列名。 說明 Field列的類型不能是VARCHAR和BOOLEAN類型。 |
樣本
樣本1:裝置ID為F07A1260和F07A1261,對每條時間軸進行降採樣操作,時間軸按照20s時間視窗計算temperature列的和。
SELECT device_id, region, time, sum(temperature) AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00' sample by 20s;返回結果如下:
+-----------+----------+---------------------------+-------------+ | device_id | region | time | temperature | +-----------+----------+---------------------------+-------------+ | F07A1260 | north-cn | 2021-04-22T15:33:00+08:00 | 25.300000 | | F07A1261 | south-cn | 2021-04-22T15:51:20+08:00 | 35.900000 | | F07A1260 | north-cn | 2021-04-22T15:33:20+08:00 | 10.600000 | | F07A1261 | south-cn | 2021-04-22T15:51:40+08:00 | 20.600000 | +-----------+----------+---------------------------+-------------+樣本2:裝置ID為F07A1260和F07A1261,計算每個裝置的溫度之和。
SELECT device_id, region, time, sum(temperature) AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00' sample by 0;返回結果如下:
+-----------+----------+---------------------------+-------------+ | device_id | region | time | temperature | +-----------+----------+---------------------------+-------------+ | F07A1260 | north-cn | 1970-01-01T08:00:00+08:00 | 35.900000 | | F07A1261 | south-cn | 1970-01-01T08:00:00+08:00 | 56.500000 | +-----------+----------+---------------------------+-------------+樣本3:計算所有裝置的溫度之和。
SELECT sum(temperature) AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00';返回結果如下:
+-------------+ | temperature | +-------------+ | 92.400000 | +-------------+
AVG函數
說明
計算時序資料表中Field列的平均值。
文法
AVG(field_name)AVG的傳回型別為DOUBLE類型。
參數
參數 | 描述 |
field_name | Field列名。 說明 Field列的類型不能是VARCHAR和BOOLEAN類型。 |
樣本
樣本1:裝置ID為F07A1260和F07A1261,對每條時間軸進行降採樣操作,時間軸按照20s時間視窗計算temperature列的平均值。
SELECT device_id, region, time, avg(temperature) AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00' sample by 20s;返回結果如下:
+-----------+----------+---------------------------+-------------+ | device_id | region | time | temperature | +-----------+----------+---------------------------+-------------+ | F07A1260 | north-cn | 2021-04-22T15:33:00+08:00 | 12.650000 | | F07A1261 | south-cn | 2021-04-22T15:51:20+08:00 | 11.966667 | | F07A1260 | north-cn | 2021-04-22T15:33:20+08:00 | 10.600000 | | F07A1261 | south-cn | 2021-04-22T15:51:40+08:00 | 20.600000 | +-----------+----------+---------------------------+-------------+樣本2:裝置ID為F07A1260和F07A1261,計算每個裝置的溫度的平均值。
SELECT device_id, region, time, avg(temperature) AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00' sample by 0;返回結果如下:
+-----------+----------+---------------------------+-------------+ | device_id | region | time | temperature | +-----------+----------+---------------------------+-------------+ | F07A1260 | north-cn | 1970-01-01T08:00:00+08:00 | 11.966667 | | F07A1261 | south-cn | 1970-01-01T08:00:00+08:00 | 14.125000 | +-----------+----------+---------------------------+-------------+樣本3:計算所有裝置的溫度的平均值。
SELECT avg(temperature) AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00';返回結果如下:
+-------------+ | temperature | +-------------+ | 13.200000 | +-------------+
COUNT函數
說明
統計時序資料表中Field列的值個數。
文法
COUNT(field_name)COUNT的傳回型別為BIGINT類型。
參數
參數 | 描述 |
field_name | Field列名。 |
樣本
樣本1:裝置ID為F07A1260和F07A1261,對每條時間軸進行降採樣操作,時間軸按照20s時間視窗統計各個視窗中temperature列的值個數。
SELECT device_id, region, time, count(temperature) AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00' sample by 20s;返回結果如下:
+-----------+----------+---------------------------+-------------+ | device_id | region | time | temperature | +-----------+----------+---------------------------+-------------+ | F07A1260 | north-cn | 2021-04-22T15:33:00+08:00 | 2 | | F07A1261 | south-cn | 2021-04-22T15:51:20+08:00 | 3 | | F07A1260 | north-cn | 2021-04-22T15:33:20+08:00 | 1 | | F07A1261 | south-cn | 2021-04-22T15:51:40+08:00 | 1 | +-----------+----------+---------------------------+-------------+樣本2:裝置ID為F07A1260和F07A1261,統計每個裝置的溫度的值個數。
SELECT device_id, region, time, count(temperature) AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00' sample by 0;返回結果如下:
+-----------+----------+---------------------------+-------------+ | device_id | region | time | temperature | +-----------+----------+---------------------------+-------------+ | F07A1260 | north-cn | 1970-01-01T08:00:00+08:00 | 3 | | F07A1261 | south-cn | 1970-01-01T08:00:00+08:00 | 4 | +-----------+----------+---------------------------+-------------+樣本3:統計所有裝置的溫度的值個數。
SELECT count(temperature) AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00';返回結果如下:
+-------------+ | temperature | +-------------+ | 7 | +-------------+
選擇函數
MIN函數
說明
查詢時序資料表中Field列的最小值。
文法
MIN(field_name)MIN的傳回型別為DOUBLE或長整型BIGINT。
參數
參數 | 描述 |
field_name | Field列名。 說明 Field列的類型不能是VARCHAR和BOOLEAN類型。 |
樣本
樣本1:裝置ID為F07A1260和F07A1261,對每條時間軸進行降採樣操作,時間軸按照20s時間視窗查詢各個視窗中temperature列的最小值。
SELECT device_id, region, time, min(temperature) AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00' sample by 20s;返回結果如下:
+-----------+----------+---------------------------+-------------+ | device_id | region | time | temperature | +-----------+----------+---------------------------+-------------+ | F07A1260 | north-cn | 2021-04-22T15:33:00+08:00 | 12.100000 | | F07A1261 | south-cn | 2021-04-22T15:51:20+08:00 | 10.600000 | | F07A1260 | north-cn | 2021-04-22T15:33:20+08:00 | 10.600000 | | F07A1261 | south-cn | 2021-04-22T15:51:40+08:00 | 20.600000 | +-----------+----------+---------------------------+-------------+樣本2:裝置ID為F07A1260和F07A1261,查詢每個裝置的溫度的最小值。
SELECT device_id, region, time, min(temperature) AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00' sample by 0;返回結果如下:
+-----------+----------+---------------------------+-------------+ | device_id | region | time | temperature | +-----------+----------+---------------------------+-------------+ | F07A1260 | north-cn | 2021-04-22T15:33:20+08:00 | 10.600000 | | F07A1261 | south-cn | 2021-04-22T15:51:27+08:00 | 10.600000 | +-----------+----------+---------------------------+-------------+樣本3:查詢所有裝置的溫度的最小值。
SELECT min(temperature) AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00';返回結果如下:
+-------------+ | temperature | +-------------+ | 10.600000 | +-------------+
MAX函數
說明
查詢時序資料表中Field列的最大值。
文法
MAX(field_name)MAX的傳回型別為DOUBLE或長整型BIGINT。
參數
參數 | 描述 |
field_name | Field列名。 說明 Field列的類型不能是VARCHAR和BOOLEAN類型。 |
樣本
樣本1:裝置ID為F07A1260和F07A1261,對每條時間軸進行降採樣操作,時間軸按照20s時間視窗查詢各個視窗中temperature列的最大值。
SELECT device_id, region, time, max(temperature) AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00' sample by 20s;返回結果如下:
+-----------+----------+---------------------------+-------------+ | device_id | region | time | temperature | +-----------+----------+---------------------------+-------------+ | F07A1260 | north-cn | 2021-04-22T15:33:00+08:00 | 13.200000 | | F07A1261 | south-cn | 2021-04-22T15:51:20+08:00 | 13.200000 | | F07A1260 | north-cn | 2021-04-22T15:33:20+08:00 | 10.600000 | | F07A1261 | south-cn | 2021-04-22T15:51:40+08:00 | 20.600000 | +-----------+----------+---------------------------+-------------+樣本2:裝置ID為F07A1260和F07A1261,查詢每個裝置的溫度的最大值。
SELECT device_id, region, time, max(temperature) AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00' sample by 0;返回結果如下:
+-----------+----------+---------------------------+-------------+ | device_id | region | time | temperature | +-----------+----------+---------------------------+-------------+ | F07A1260 | north-cn | 2021-04-22T15:33:10+08:00 | 13.200000 | | F07A1261 | south-cn | 2021-04-22T15:51:47+08:00 | 20.600000 | +-----------+----------+---------------------------+-------------+樣本三:查詢所有裝置的溫度的最大值。
SELECT max(temperature) AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00';返回結果如下:
+-------------+ | temperature | +-------------+ | 20.600000 | +-------------+
FIRST函數
說明
擷取時序資料表中Field列的第一個值。
文法
FIRST(field_name)FIRST的傳回型別與Field列的類型相同。
參數
參數 | 描述 |
field_name | Field列名。 |
樣本
樣本1:裝置ID為F07A1260和F07A1261,對每條時間軸進行降採樣操作,時間軸按照20s時間視窗擷取各個視窗中第一個溫度值。
SELECT device_id, region, time, first(temperature) AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00' sample by 20s;返回結果如下:
+-----------+----------+---------------------------+-------------+ | device_id | region | time | temperature | +-----------+----------+---------------------------+-------------+ | F07A1260 | north-cn | 2021-04-22T15:33:00+08:00 | 12.100000 | | F07A1261 | south-cn | 2021-04-22T15:51:20+08:00 | 12.100000 | | F07A1260 | north-cn | 2021-04-22T15:33:20+08:00 | 10.600000 | | F07A1261 | south-cn | 2021-04-22T15:51:40+08:00 | 20.600000 | +-----------+----------+---------------------------+-------------+樣本2:裝置ID為F07A1260和F07A1261,擷取每個裝置第一個溫度值。
SELECT device_id, region, time, first(temperature) AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00' sample by 0;返回結果如下:
+-----------+----------+---------------------------+-------------+ | device_id | region | time | temperature | +-----------+----------+---------------------------+-------------+ | F07A1260 | north-cn | 2021-04-22T15:33:00+08:00 | 12.100000 | | F07A1261 | south-cn | 2021-04-22T15:51:20+08:00 | 12.100000 | +-----------+----------+---------------------------+-------------+
LAST函數
說明
擷取時序資料表中Field列的最後一個值。
文法
LAST(field_name)LAST的傳回型別與Field列的類型相同。
參數
參數 | 描述 |
field_name | Field列名。 |
樣本
樣本1:裝置ID為F07A1260和F07A1261,對每條時間軸進行降採樣操作,時間軸按照20s時間視窗擷取各個視窗中最後一個溫度值。
SELECT device_id, region, time, last(temperature) AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00' sample by 20s;返回結果如下:
+-----------+----------+---------------------------+-------------+ | device_id | region | time | temperature | +-----------+----------+---------------------------+-------------+ | F07A1260 | north-cn | 2021-04-22T15:33:00+08:00 | 13.200000 | | F07A1261 | south-cn | 2021-04-22T15:51:20+08:00 | 10.600000 | | F07A1260 | north-cn | 2021-04-22T15:33:20+08:00 | 10.600000 | | F07A1261 | south-cn | 2021-04-22T15:51:40+08:00 | 20.600000 | +-----------+----------+---------------------------+-------------+樣本2:裝置ID為F07A1260和F07A1261,擷取每個裝置的最後一個溫度值。
SELECT device_id, region, time, last(temperature) AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00' sample by 0;返回結果如下:
+-----------+----------+---------------------------+-------------+ | device_id | region | time | temperature | +-----------+----------+---------------------------+-------------+ | F07A1260 | north-cn | 2021-04-22T15:33:20+08:00 | 10.600000 | | F07A1261 | south-cn | 2021-04-22T15:51:47+08:00 | 20.600000 | +-----------+----------+---------------------------+-------------+
PERCENTILE函數
說明
計算時序資料表中與Field列關聯的第P個百分位欄位值。
文法
PERCENTILE(field_name,P)PERCENTILE的傳回型別為DOUBLE類型。
參數
參數 | 描述 |
field_name | Field列名。 說明 Field列的類型不能是VARCHAR和BOOLEAN類型。 |
P | 取值為整數或浮點數,範圍為[0,100],預設值為50。 |
樣本
樣本1:裝置ID為F07A1260和F07A1261,對每條時間軸進行降採樣操作,時間軸按照20s時間視窗擷取各個視窗中temperature列的90分位值。
SELECT device_id, region, time, percentile(temperature, 90) AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00' sample by 20s;返回結果如下:
+-----------+----------+---------------------------+-------------+ | device_id | region | time | temperature | +-----------+----------+---------------------------+-------------+ | F07A1260 | north-cn | 2021-04-22T15:33:00+08:00 | 13.200000 | | F07A1261 | south-cn | 2021-04-22T15:51:20+08:00 | 13.200000 | | F07A1260 | north-cn | 2021-04-22T15:33:20+08:00 | 10.600000 | | F07A1261 | south-cn | 2021-04-22T15:51:40+08:00 | 20.600000 | +-----------+----------+---------------------------+-------------+樣本2:裝置ID為F07A1260和F07A1261,擷取每個裝置的溫度的90分位值。
SELECT device_id, region, time, percentile(temperature, 90) AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00' sample by 0;返回結果如下:
+-----------+----------+---------------------------+-------------+ | device_id | region | time | temperature | +-----------+----------+---------------------------+-------------+ | F07A1260 | north-cn | 1970-01-01T08:00:00+08:00 | 13.200000 | | F07A1261 | south-cn | 1970-01-01T08:00:00+08:00 | 20.600000 | +-----------+----------+---------------------------+-------------+
轉換函式
RATE函數
說明
計算時序資料表中Field列值的斜率。
計算公式:每個資料點的時間戳記和值分別是:(t1,v1),(t2,v2)...(tN,vN)。使用RATE函數後,返回N-1個資料點,每個資料點的時間戳記和值分別是:

公式中interval是指定的變動率,單位為秒。
文法
RATE(field_name, 'interval units')RATE的傳回型別為DOUBLE類型。
SQL語句中只支援RATE運算元單獨使用。
參數
參數 | 描述 |
field_name | Field列名。 說明 Field列的類型不能是VARCHAR和BOOLEAN類型。 |
interval units | 變動率。預設值為1s。單位包括s(秒)、m(分鐘)、h(小時)、d(天)。 |
樣本
樣本1:裝置ID為F07A1260和F07A1261,計算每個裝置溫度的秒級變動率。
SELECT device_id, region, time, rate(temperature) AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00' sample by 0;返回結果如下:
+-----------+----------+---------------------------+-------------+ | device_id | region | time | temperature | +-----------+----------+---------------------------+-------------+ | F07A1260 | north-cn | 2021-04-22T15:33:10+08:00 | 0.110000 | | F07A1260 | north-cn | 2021-04-22T15:33:20+08:00 | -0.260000 | | F07A1261 | south-cn | 2021-04-22T15:51:21+08:00 | 1.100000 | | F07A1261 | south-cn | 2021-04-22T15:51:27+08:00 | -0.433333 | | F07A1261 | south-cn | 2021-04-22T15:51:47+08:00 | 0.500000 | +-----------+----------+---------------------------+-------------+樣本2:裝置ID為F07A1260和F07A1261,計算每個裝置溫度的分鐘變動率。
SELECT device_id, region, time, rate(temperature, '1m') AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00' sample by 0;返回結果如下:
+-----------+----------+---------------------------+-------------+ | device_id | region | time | temperature | +-----------+----------+---------------------------+-------------+ | F07A1260 | north-cn | 2021-04-22T15:33:10+08:00 | 6.600000 | | F07A1260 | north-cn | 2021-04-22T15:33:20+08:00 | -15.600000 | | F07A1261 | south-cn | 2021-04-22T15:51:21+08:00 | 66.000000 | | F07A1261 | south-cn | 2021-04-22T15:51:27+08:00 | -26.000000 | | F07A1261 | south-cn | 2021-04-22T15:51:47+08:00 | 30.000000 | +-----------+----------+---------------------------+-------------+樣本3:裝置ID為F07A1260和F07A1261,先按照20s時間視窗計算temperature列的平均值,再對降採樣後的值計算分鐘變動率。
SELECT device_id, region, time, rate(avg(temperature), '1m') AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00' sample by 20s;返回結果如下:
+-----------+----------+---------------------------+-------------+ | device_id | region | time | temperature | +-----------+----------+---------------------------+-------------+ | F07A1260 | north-cn | 2021-04-22T15:33:20+08:00 | -6.150000 | | F07A1261 | south-cn | 2021-04-22T15:51:40+08:00 | 25.900000 | +-----------+----------+---------------------------+-------------+樣本4:SQL語句中只支援RATE運算元單獨使用,不支援以下混用方式。
錯誤樣本1:
SELECT region, time, rate(temperature), rate(humidity) FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00' sample by 0;返回結果如下:
ERROR 9001 (0A000): UNSUPPORTED: latest/rate/delta must be the only aggregator in a single SQL statement錯誤樣本2:
SELECT region, time, rate(temperature), latest(humidity) FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00' sample by 0;返回結果如下:
ERROR 9001 (0A000): UNSUPPORTED: latest/rate/delta must be the only aggregator in a single SQL statement
DELTA函數
說明
計算時序資料表中Field列的值與前一行對應值的差。
計算公式:每個資料點的時間戳記和值分別是:(t1,v1),(t2,v2)...(tN,vN)。使用DELTA函數後,返回N-1個資料點,每個資料點的時間戳記和值分別是:(t2,v2-v1),(t3,v3-v2)...(tN,vN-,vN-1)。
文法
DELTA(field_name)DELTA的傳回型別為DOUBLE類型。
SQL語句中只支援DELTA運算元單獨使用。
參數
參數 | 描述 |
field_name | Field列名。 說明 Field列的類型不能是VARCHAR和BOOLEAN類型。 |
樣本
樣本1:裝置ID為F07A1260和F07A1261,計算每個裝置溫度與前一行差值。
SELECT device_id, region, time, delta(temperature) AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00' sample by 0;返回結果如下:
+-----------+----------+---------------------------+-------------+ | device_id | region | time | temperature | +-----------+----------+---------------------------+-------------+ | F07A1260 | north-cn | 2021-04-22T15:33:10+08:00 | 1.100000 | | F07A1260 | north-cn | 2021-04-22T15:33:20+08:00 | -2.600000 | | F07A1261 | south-cn | 2021-04-22T15:51:21+08:00 | 1.100000 | | F07A1261 | south-cn | 2021-04-22T15:51:27+08:00 | -2.600000 | | F07A1261 | south-cn | 2021-04-22T15:51:47+08:00 | 10.000000 | +-----------+----------+---------------------------+-------------+樣本2:裝置ID為F07A1260和F07A1261,先按照20s時間視窗計算temperature列的平均值,再對降採樣後的值計算差值。
SELECT device_id, region, time, delta(avg(temperature)) AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00' sample by 20s;返回結果如下:
+-----------+----------+---------------------------+-------------+ | device_id | region | time | temperature | +-----------+----------+---------------------------+-------------+ | F07A1260 | north-cn | 2021-04-22T15:33:20+08:00 | -2.050000 | | F07A1261 | south-cn | 2021-04-22T15:51:40+08:00 | 8.633333 | +-----------+----------+---------------------------+-------------+樣本3:SQL語句中只支援DELTA運算元單獨使用,不支援以下混用方式。
錯誤樣本:
錯誤樣本:SELECT region, time, delta(temperature), rate(humidity) FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00' sample by 0;返回結果如下:
ERROR 9001 (0A000): UNSUPPORTED: latest/rate/delta must be the only aggregator in a single SQL statement
LATEST函數
說明
擷取時序資料表中Field列的最新的N條資料。
文法
LATEST(field_name, N)LATEST的傳回型別與Field列的類型相同。
SQL語句中只支援LATEST運算元單獨使用。
參數
參數 | 描述 |
field_name | Field列名。 |
N | 整型,用於指定查詢最新的N條資料。預設值為1,表示擷取最新的一條資料。 |
樣本
樣本1:查詢裝置F07A1260和F07A1261最新的溫度值。
SELECT device_id, region, time, latest(temperature) AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00' sample by 0;返回結果如下:
+-----------+----------+---------------------------+-------------+ | device_id | region | time | temperature | +-----------+----------+---------------------------+-------------+ | F07A1261 | south-cn | 2021-04-22T15:51:47+08:00 | 20.600000 | | F07A1260 | north-cn | 2021-04-22T15:33:20+08:00 | 10.600000 | +-----------+----------+---------------------------+-------------+樣本2:查詢裝置F07A1260和F07A1261最新的兩條溫度值。
SELECT device_id, region, time, latest(temperature, 2) AS temperature FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00' sample by 0;返回結果如下:
+-----------+----------+---------------------------+-------------+ | device_id | region | time | temperature | +-----------+----------+---------------------------+-------------+ | F07A1261 | south-cn | 2021-04-22T15:51:27+08:00 | 10.600000 | | F07A1261 | south-cn | 2021-04-22T15:51:47+08:00 | 20.600000 | | F07A1260 | north-cn | 2021-04-22T15:33:10+08:00 | 13.200000 | | F07A1260 | north-cn | 2021-04-22T15:33:20+08:00 | 10.600000 | +-----------+----------+---------------------------+-------------+樣本3:SQL語句中只支援LATEST運算元單獨使用,不支援以下混用方式。
錯誤樣本:
SELECT region, time, latest(temperature), rate(humidity) FROM sensor WHERE time <= '2021-04-22T15:51:47+08:00' and time >= '2021-04-22T15:33:00+08:00' sample by 0;返回結果如下:
ERROR 9001 (0A000): UNSUPPORTED: latest/rate/delta must be the only aggregator in a single SQL statement
ANOMALY_DETECT函數(時序異常檢測)
說明
對時序資料表中Field列進行時序異常檢測。
文法
ANOMALY_DETECT(field_name, [algo_name | model_name], options)ANOMALY_DETECT的傳回型別為BOOLEAN類型。
參數
參數 | 描述 |
field_name | Field列名。 說明 Field列的類型不能是VARCHAR和BOOLEAN類型。 |
algo_name | 異常檢測演算法名稱。支援阿里達摩院自研線上異常檢測演算法。
說明 algo_identifer參數適用於未開通資料庫內機器學習功能,但有使用時序異常檢測需求的情境。 |
model_name | 模型名稱。 說明
|
options | 調整異常檢測演算法的檢測效果。選擇性參數。格式為: |
樣本
樣本1:對時序資料表sensor中指定時間範圍的溫度使用esd演算法進行時序異常檢測。
SELECT device_id, region, time, anomaly_detect(temperature, 'esd') AS detect_result FROM sensor WHERE time >= '2022-01-01T00:00:00+08:00' and time < '2022-01-01T00:01:00+08: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:20+08:00 | false | | F07A1260 | north-cn | 2022-01-01T00:00:40+08:00 | true | | F07A1261 | south-cn | 2022-01-01T00:00:00+08:00 | false | | F07A1261 | south-cn | 2022-01-01T00:00:20+08:00 | false | | F07A1261 | south-cn | 2022-01-01T00:00:40+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-01T00:00:00+08:00' and time < '2022-01-01T00:01:00+08: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:20+08:00 | false | | F07A1260 | north-cn | 2022-01-01T00:00:40+08:00 | true | +-----------+----------+---------------------------+---------------+樣本3:對時序資料表sensor中F07A1260裝置指定時間範圍的溫度使用esd演算法進行時序異常檢測,並自訂異常檢測演算法的參數(異常檢測演算法參考的時間視窗長度為30,異常檢測時值小於90%分位元的點被過濾)。
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-01T00:00:00+08:00' and time < '2022-01-01T00:01:00+08: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:20+08:00 | false | | F07A1260 | north-cn | 2022-01-01T00:00:40+08:00 | true | +-----------+----------+---------------------------+---------------+樣本4:使用在資料庫內機器學習功能中建立的時序異常檢測模型,對sensor表中指定時間範圍的溫度進行時序異常檢測。
SELECT device_id, region, `time`, raw(temperature) as temperature, anomaly_detect(temperature, ad_model) AS detect_result FROM sensor WHERE time >= '2022-01-01T00:00:00+08:00' and time < '2022-01-01T00:01:00+08:00' sample by 0;返回結果如下:
+-----------+----------+---------------------------+-------------+---------------+ | device_id | region | time | temperature | detect_result | +-----------+----------+---------------------------+-------------+---------------+ | F07A1260 | north-cn | 2022-01-01T00:00:00+08:00 | 59.100000 | true | | F07A1260 | north-cn | 2022-01-01T00:00:20+08:00 | 13.200000 | false | | F07A1260 | north-cn | 2022-01-01T00:00:40+08:00 | 64.600000 | true | | F07A1261 | south-cn | 2022-01-01T00:00:00+08:00 | 12.100000 | false | | F07A1261 | south-cn | 2022-01-01T00:00:20+08:00 | 13.200000 | false | | F07A1261 | south-cn | 2022-01-01T00:00:40+08:00 | 10.600000 | false | +-----------+----------+---------------------------+-------------+---------------+
BINS函數(特徵分箱)
說明
對時序資料表中Field列進行特徵分箱,特徵分箱(也稱為離散分箱或者離散分段)是一種資料預先處理技術。
文法
BINS(field_name, options)BINS的傳回型別為VARCHAR類型。
參數
參數 | 是否必選 | 描述 |
field_name | 是 | Field列名。 說明 Field列的類型不能是VARCHAR和BOOLEAN類型。 |
options | 否 | 指定特徵分箱策略和輸出方式。格式為: |
樣本
樣本1:對時序資料表sensor中指定時間範圍的溫度進行特徵分箱。
SELECT device_id, region, time, bins(temperature) AS temperature_bin FROM sensor WHERE time >= '2021-04-22 00:00:00' AND time < '2022-04-23 00:01:00' sample by 0;返回結果如下:
+-----------+----------+--------------------------------+--------------------+ | device_id | region | time | temperature_bin | +-----------+----------+--------------------------------+--------------------+ | F07A1260 | north-cn | 2021-04-22T15:33:00+08:00 | [10.60,12.10) | | F07A1260 | north-cn | 2021-04-22T15:33:10+08:00 | [12.10,13.20] | | F07A1260 | north-cn | 2021-04-22T15:33:20+08:00 | [10.60,10.60) | | F07A1261 | south-cn | 2021-04-22T15:51:20+08:00 | [10.60,12.10) | | F07A1261 | south-cn | 2021-04-22T15:51:21+08:00 | [12.10,13.20) | | F07A1261 | south-cn | 2021-04-22T15:51:27+08:00 | [10.60,10.60) | | F07A1261 | south-cn | 2021-04-22T15:51:47+08:00 | [13.20,20.60] | +-----------+-----------+-------------------------------+--------------------+樣本2:對時序資料表sensor中F07A1260裝置指定時間範圍的溫度進行特徵分箱。
SELECT device_id, region, time, bins(temperature) AS temperature_bin FROM sensor WHERE device_id in ('F07A1260') AND time >= '2021-04-22 00:00:00' AND time < '2022-04-23 00:01:00' sample by 0;返回結果如下:
+-----------+----------+--------------------------------+--------------------+ | device_id | region | time | temperature_bin | +-----------+----------+--------------------------------+--------------------+ | F07A1260 | north-cn | 2021-04-22T15:33:00+08:00 | [10.60,12.10) | | F07A1260 | north-cn | 2021-04-22T15:33:10+08:00 | [12.10,13.20] | | F07A1260 | north-cn | 2021-04-22T15:33:20+08:00 | [10.60,10.60) | +-----------+----------+--------------------------------+--------------------+樣本3:對時序資料表sensor中F07A1260裝置指定時間範圍的溫度進行特徵分箱,並自訂分箱演算法的參數(產生分箱數為2的等寬分箱,結果以分箱區間的順序編碼形式輸出)。
SELECT device_id, region, time, bins(temperature, 'n_bins=2, output_type=ordinal, strategy=uniform') AS temperature_bin FROM sensor WHERE device_id in ('F07A1260') AND time >= '2021-04-22 00:00:00' AND time < '2022-04-23 00:01:00' sample by 0;返回結果如下:
+-----------+----------+--------------------------------+--------------------+ | device_id | region | time | temperature_bin | +-----------+----------+--------------------------------+--------------------+ | F07A1260 | north-cn | 2021-04-22T15:33:00+08:00 | 1 | | F07A1260 | north-cn | 2021-04-22T15:33:10+08:00 | 1 | | F07A1260 | north-cn | 2021-04-22T15:33:20+08:00 | 0 | +-----------+----------+--------------------------------+--------------------+