本文介紹時序SQL中支持的常用函數和使用示例。
引擎與版本
常用時序函數列表
函數 | 說明 |
獲取系統當前運行時間。 | |
計算時序數據表中Field列的和。 | |
計算時序數據表中Field列的平均值。 | |
統計時序數據表中Field列值的個數。 | |
查詢時序數據表中Field列的最小值。 | |
查詢時序數據表中Field列的最大值。 | |
獲取時序數據表中Field列的第一個值。 | |
獲取時序數據表中Field列的最后一個值。 | |
計算時序數據表中與Field列關聯的第P個百分位字段值。 | |
計算時序數據表中Field列值的斜率。 | |
計算時序數據表中Field列的值與前一行對應值的差。 | |
獲取時序數據表中Field列的最新的N條數據。 | |
對時序數據表中的Field列進行時序預測。 | |
對時序數據表中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_TIMESTAMP
CURRENT_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列值的斜率。
計算公式:每個數據點的時間戳和值分別是:(t
1
,v
1
),(t
2
,v
2
)...(t
N
,v
N
)
。使用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列的值與前一行對應值的差。
計算公式:每個數據點的時間戳和值分別是:(t
1
,v
1
),(t
2
,v
2
)...(t
N
,v
N
)
。使用DELTA函數后,返回N-1個數據點,每個數據點的時間戳和值分別是:(t
2
,v
2
-v
1
),(t
3
,v
3
-v
2
)...(t
N
,v
N
-,v
N-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
FORECAST函數(時序預測)
前提條件
時序預測功能依賴于Lindorm AI引擎,在使用FORECAST函數前,請開通Lindorm AI引擎。開通方式,請參見開通指南。
說明
對時序數據表中的Field列進行時序預測。
語法
FORECAST(field_name, model_name, options)
FORECAST的返回類型為DOUBLE類型。
參數
參數 | 描述 |
field_name | Field列名。 說明 Field列的類型不能是VARCHAR和BOOLEAN類型。 |
model_name | 模型名稱。 說明 model_name的類型為VARCHAR類型。 |
options | 調整時序預測的結果。可選參數。格式為:
|
示例
示例1:對時序數據表sensor中指定時間段的溫度進行時序預測。
SELECT device_id, region, `time`, forecast(temperature, forecast_model) AS forecast_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 | forecast_result | +-----------+----------+---------------------------+------------------+ | F07A1260 | north-cn | 2022-01-01T00:00:00+08:00 | 12.40307807 | | F07A1260 | north-cn | 2022-01-01T00:00:20+08:00 | 11.36715841 | | F07A1260 | north-cn | 2022-01-01T00:00:40+08:00 | 10.12969923 | | F07A1261 | south-cn | 2022-01-01T00:00:00+08:00 | 26.51369649 | | F07A1261 | south-cn | 2022-01-01T00:00:20+08:00 | 25.54403301 | | F07A1261 | south-cn | 2022-01-01T00:00:40+08:00 | 24.46405267 | +-----------+----------+---------------------------+------------------+
示例2:對時序數據表sensor中指定時間段的溫度進行時序預測,同時指定預測步長為2,輸出分位數為0.9。
SELECT device_id, region, `time`, forecast(temperature, forecast_model, 'step=2,quantile_output=0.9') AS forecast_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 | forecast_result | +-----------+----------+---------------------------+------------------+ | F07A1260 | north-cn | 2022-01-01T00:00:00+08:00 | 13.12353792 | | F07A1260 | north-cn | 2022-01-01T00:00:20+08:00 | 12.14833554 | | F07A1261 | south-cn | 2022-01-01T00:00:00+08:00 | 26.73869304 | | F07A1261 | south-cn | 2022-01-01T00:00:20+08:00 | 24.92990853 | +-----------+----------+---------------------------+------------------+
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 | +-----------+----------+--------------------------------+--------------------+