このトピックでは、LindormTSDB SQL でサポートされている一般的な関数について説明し、例を示します。
適用可能なエンジンとバージョン
このトピックで説明する一般的な時系列関数は、LindormTSDB にのみ適用されます。
これらの関数は、LindormTSDB 3.4.7 以降のバージョンでサポートされています。 LindormTSDB のバージョンを表示またはアップグレードする方法の詳細については、「LindormTSDB のリリースノート」および「Lindorm インスタンスのマイナーエンジンバージョンをアップグレードする」をご参照ください。
一般的な時系列関数リスト
関数 | 説明 |
この関数を呼び出して、現在のシステム時刻を取得できます。 | |
この関数を呼び出して、フィールド列の値の合計を計算できます。 | |
この関数を呼び出して、フィールド列の値の平均値を計算できます。 | |
この関数を呼び出して、フィールド列の値の数をカウントできます。 | |
この関数を呼び出して、フィールド列の値の最小値をクエリできます。 | |
この関数を呼び出して、フィールド列の値の最大値をクエリできます。 | |
この関数を呼び出して、フィールド列の値の最初の値をクエリできます。 | |
この関数を呼び出して、フィールド列の値の最後の値をクエリできます。 | |
この関数を呼び出して、フィールド列の値の指定されたパーセンタイルをクエリできます。 | |
この関数を呼び出して、フィールド列の値の傾きを計算できます。 | |
この関数を呼び出して、同じフィールド列内の各値と前の行の値との差を計算できます。 | |
この関数を呼び出して、フィールド列の最新の N 個の値をクエリできます。 | |
この関数を呼び出して、時系列テーブルの列のフィールド値を予測できます。 | |
この関数を呼び出して、指定されたフィールド列の異常を検出できます。 | |
この関数を呼び出して、時系列テーブルの指定されたフィールド列のデータに対して特徴量ビニングを実行できます。 |
データの準備
このトピックでは、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 |
+-----------+----------+---------------------------+-------------+-----------+
// sensor テーブルには、次の 2 つの時系列が含まれています。sensor テーブルには、次の 2 つの時系列が含まれています。
device_id=F07A1260, region=north-cnタグを持ち、temperature フィールドと humidity フィールドを含む時系列 1。device_id=F07A1261, region=south-cnタグを持ち、temperature フィールドと humidity フィールドを含む時系列 2。
時系列の詳細については、「用語」をご参照ください。
タイムスタンプ関数
CURRENT_TIMESTAMP
概要
この関数を呼び出して、現在のシステム時刻を取得できます。
構文
CURRENT_TIMESTAMP
// 注意CURRENT_TIMESTAMP関数を呼び出すときにパラメータを指定する必要はありません。CURRENT_TIMESTAMP 関数によって返されるタイムスタンプはミリ秒単位まで正確です。例:
2023-04-23T21:13:15.819+08:00。CURRENT_TIMESTAMP 関数は、Lindorm インスタンスが実行されているサーバーのシステム時刻を返します。したがって、この関数によって生成される時刻データがビジネスの要件を満たしていることを確認してください。
業務でデータを書き込むときは、この関数によって生成されたタイムスタンプを使用しないでください。テストおよび開発用の大量のテストデータを生成するために、この関数を使用することをお勧めします。テストおよび開発用の大量のテストデータを生成するために、この関数を使用することをお勧めします。
例
sensor テーブルにデータの行を追加します。データのタグは 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
概要
この関数を呼び出して、フィールド列の値の合計を計算できます。
構文
SUM(field_name)
// 注意:SUM 関数は DOUBLE または BIGINT 値を返します。SUM 関数は DOUBLE または BIGINT 値を返します。
パラメータ
パラメータ | 説明 |
field_name | フィールド列の名前。 説明 指定されたフィールド列のデータは、VARCHAR 型または BOOLEAN 型にすることはできません。 |
例
例 1: ID が F07A1260 と F07A1261 の 2 つのデバイスによって個別に生成されたデータを含む 2 つの時系列に対して、20 秒間隔でダウンサンプリングを実行します。次に、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 の 2 つのデバイスによって生成された 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 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: すべてのデバイスによって生成された temperature 値の合計を計算します。
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
概要
この関数を呼び出して、フィールド列の値の平均値を計算できます。
構文
AVG(field_name)
// 注意:AVG 関数は DOUBLE 値を返します。AVG 関数は DOUBLE 値を返します。
パラメータ
パラメータ | 説明 |
field_name | フィールド列の名前。 説明 指定されたフィールド列のデータは、VARCHAR 型または BOOLEAN 型にすることはできません。 |
例
例 1: ID が F07A1260 と F07A1261 の 2 つのデバイスによって個別に生成されたデータを含む 2 つの時系列に対して、20 秒間隔でダウンサンプリングを実行します。次に、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 の 2 つのデバイスによって生成された 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 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: すべてのデバイスによって生成された temperature 値の平均値を計算します。
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
概要
この関数を呼び出して、フィールド列の値の数をカウントできます。
構文
COUNT(field_name)
// 注意:COUNT 関数は BIGINT 値を返します。COUNT 関数は BIGINT 値を返します。
パラメータ
パラメータ | 説明 |
field_name | フィールド列の名前。 |
例
例 1: ID が F07A1260 と F07A1261 の 2 つのデバイスによって個別に生成されたデータを含む 2 つの時系列に対して、20 秒間隔でダウンサンプリングを実行します。次に、各間隔内の 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 の 2 つのデバイスによって生成された 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 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: すべてのデバイスによって生成された temperature 値の数をカウントします。
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
概要
この関数を呼び出して、フィールド列の値の最小値をクエリできます。
構文
MIN(field_name)
// 注意:MIN 関数は DOUBLE または BIGINT 値を返します。MIN 関数は DOUBLE または BIGINT 値を返します。
パラメータ
パラメータ | 説明 |
field_name | フィールド列の名前。 説明 指定されたフィールド列のデータは、VARCHAR 型または BOOLEAN 型にすることはできません。 |
例
例 1: ID が F07A1260 と F07A1261 の 2 つのデバイスによって個別に生成されたデータを含む 2 つの時系列に対して、20 秒間隔でダウンサンプリングを実行します。次に、各間隔内の 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 の 2 つのデバイスによって生成された 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 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: すべてのデバイスによって生成された temperature 値の最小値をクエリします。
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
概要
この関数を呼び出して、フィールド列の値の最大値をクエリできます。
構文
MAX(field_name)
// 注意:MAX 関数は DOUBLE または BIGINT 値を返します。MAX 関数は DOUBLE または BIGINT 値を返します。
パラメータ
パラメータ | 説明 |
field_name | フィールド列の名前。 説明 指定されたフィールド列のデータは、VARCHAR 型または BOOLEAN 型にすることはできません。 |
例
例 1: ID が F07A1260 と F07A1261 の 2 つのデバイスによって個別に生成されたデータを含む 2 つの時系列に対して、20 秒間隔でダウンサンプリングを実行します。次に、各間隔内の 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 の 2 つのデバイスによって生成された 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 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 | +-----------+----------+---------------------------+-------------+例 3: すべてのデバイスによって生成された temperature 値の最大値をクエリします。
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
概要
この関数を呼び出して、フィールド列の値の最初の値をクエリできます。
構文
FIRST(field_name)
// 注意:FIRST 関数は、指定されたフィールド列のデータと同じ型のデータを返します。FIRST 関数は、指定されたフィールド列のデータと同じ型のデータを返します。
パラメータ
パラメータ | 説明 |
field_name | フィールド列の名前。 |
例
例 1: ID が F07A1260 と F07A1261 の 2 つのデバイスによって個別に生成されたデータを含む 2 つの時系列に対して、20 秒間隔でダウンサンプリングを実行します。次に、各間隔内の temperature 列の値の最初の値をクエリします。
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 の 2 つのデバイスによって生成された temperature 値の最初の値を個別にクエリします。
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
概要
この関数を呼び出して、フィールド列の値の最後の値をクエリできます。
構文
LAST(field_name)
// 注意:LAST 関数は、指定されたフィールド列のデータと同じ型のデータを返します。LAST 関数は、指定されたフィールド列のデータと同じ型のデータを返します。
パラメータ
パラメータ | 説明 |
field_name | フィールド列の名前。 |
例
例 1: ID が F07A1260 と F07A1261 の 2 つのデバイスによって個別に生成されたデータを含む 2 つの時系列に対して、20 秒間隔でダウンサンプリングを実行します。次に、各間隔内の temperature 列の値の最後の値をクエリします。
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 の 2 つのデバイスによって生成された temperature 値の最後の値を個別にクエリします。
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
概要
この関数を呼び出して、フィールド列の値の指定されたパーセンタイルをクエリできます。
構文
PERCENTILE(field_name,P)
// 注意:PERCENTILE 関数は DOUBLE 値を返します。PERCENTILE 関数は DOUBLE 値を返します。
パラメータ
パラメータ | 説明 |
field_name | フィールド列の名前。 説明 指定されたフィールド列のデータは、VARCHAR 型または BOOLEAN 型にすることはできません。 |
P | 整数または浮動小数点数。有効な値: 0 ~ 100。デフォルト値: 50。 |
例
例 1: ID が F07A1260 と F07A1261 の 2 つのデバイスによって個別に生成されたデータを含む 2 つの時系列に対して、20 秒間隔でダウンサンプリングを実行します。次に、各間隔内の 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 の 2 つのデバイスによって生成された 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 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
概要
この関数を呼び出して、フィールド列の値の傾きを計算できます。
時系列に次のデータポイントが格納されているとします: (t1,v1), (t2,v2) ... (tN,vN)。RATE 関数を使用してデータポイントの傾きを計算すると、N-1 個のデータポイントが返されます。これらのタイムスタンプと値は、次の式を使用して計算されます。

上記の式の interval パラメータは、傾きの計算に使用される指定された間隔を示します。このパラメータの値は秒単位で測定されます。
構文
RATE(field_name, 'interval units')
// 注意RATE 関数は DOUBLE 値を返します。
RATE 演算子は、SQL ステートメントで個別に使用する必要があります。
パラメータ
パラメータ | 説明 |
field_name | フィールド列の名前。 説明 指定されたフィールド列のデータは、VARCHAR 型または BOOLEAN 型にすることはできません。 |
interval units | 傾きの計算に基づく間隔。デフォルト値: 1s。有効な単位: s (秒)、m (分)、h (時間)、d (日)。 |
例
例 1: ID が F07A1260 と F07A1261 の 2 つのデバイスによって生成された temperature 値の傾きを、1 秒間隔で個別に計算します。
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 の 2 つのデバイスによって生成された temperature 値の傾きを、1 分間隔で個別に計算します。
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 の 2 つのデバイスによって個別に生成されたデータを含む 2 つの時系列に対して、20 秒間隔でダウンサンプリングを実行します。次に、20 秒間隔ごとに temperature 列の値の平均値を計算します。最後に、1 分間隔で平均値の傾きを計算します。
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: RATE 演算子は、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
概要
この関数を呼び出して、同じフィールド列内の各値と前の行の値との差を計算できます。
時系列に次のデータポイントが格納されているとします: (t1,v1), (t2,v2) ... (tN,vN)。DELTA 関数を使用すると、次の N-1 個のデータポイントが返されます: (t2,v2-v1), (t3,v3-v2) ... (tN,vN-,vN-1)。
構文
DELTA(field_name)
// 注意DELTA 関数は DOUBLE 値を返します。
DELTA 演算子は、SQL ステートメントで個別に使用する必要があります。
パラメータ
パラメータ | 説明 |
field_name | フィールド列の名前。 説明 指定されたフィールド列のデータは、VARCHAR 型または BOOLEAN 型にすることはできません。 |
例
例 1: ID が F07A1260 と F07A1261 の 2 つのデバイスによって生成された temperature 値の同じ列内にある各値と前の行の値との差を個別に計算します。
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 の 2 つのデバイスによって個別に生成されたデータを含む 2 つの時系列に対して、20 秒間隔でダウンサンプリングを実行します。次に、20 秒間隔ごとに 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: DELTA 演算子は、SQL ステートメントで個別に使用する必要があります。次の例に示す方法で DELTA 演算子を使用しないでください。
エラー例:
Error example: 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
概要
この関数を呼び出して、フィールド列の最新の N 個の値をクエリできます。
構文
LATEST(field_name, N)
// 注意LATEST 関数は、指定されたフィールド列のデータと同じ型のデータを返します。
LATEST 演算子は、SQL ステートメントで個別に使用する必要があります。
パラメータ
パラメータ | 説明 |
field_name | フィールド列の名前。 |
N | フィールド列でクエリする最新の値の数を指定する整数。このパラメータのデフォルト値は 1 で、フィールド列の最新の値のみがクエリされることを示します |
例
例 1: ID が F07A1260 と F07A1261 のデバイスによって生成された最新の temperature 値を個別にクエリします。
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: ID が F07A1260 と F07A1261 のデバイスによって生成された最新の 2 つの temperature 値を個別にクエリします。
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: LATEST 演算子は、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
前提条件
FORECAST 関数は Lindorm AI に依存します。 FORECAST 関数を使用するには、まずインスタンスの Lindorm AI をアクティブ化する必要があります。
概要
この関数を呼び出して、時系列テーブルの列のフィールド値を予測できます。
構文
FORECAST(field_name, model_name, options)
// 注意:FORECAST 関数は DOUBLE 値を返します。FORECAST 関数は DOUBLE 値を返します。
パラメータ
パラメータ | 説明 |
field_name | フィールド列の名前。 説明 指定されたフィールド列のデータは、VARCHAR 型または BOOLEAN 型にすることはできません。 |
model_name | 値の予測に使用するモデルの名前。 説明 model_name パラメータの値は VARCHAR 型です。 |
options | 予測結果を調整するために構成できるオプション。このパラメータは省略可能です。このパラメータの値は
|
例
例 1: sensor という名前の時系列テーブルの指定された時間範囲内の temperature 値を予測します。
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: step オプションを 2 に、quantile_output オプションを 0.9 に設定して、sensor テーブルの指定された時間範囲内の temperature 値を予測します。
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
概要
この関数を呼び出して、指定されたフィールド列の異常を検出できます。
構文
ANOMALY_DETECT(field_name, [algo_name | model_name], options)
// 注意:ANOMALY_DETECT 関数は BOOLEAN 値を返します。ANOMALY_DETECT 関数は BOOLEAN 値を返します。
パラメータ
パラメータ | 説明 |
field_name | フィールド列の名前。 説明 指定されたフィールド列のデータは、VARCHAR 型または BOOLEAN 型にすることはできません。 |
algo_name | 異常の検出に使用されるアルゴリズムの名前。DAMO Academy によって開発されたオンライン異常検出アルゴリズムがサポートされています。
説明 algo_identifier パラメータは、データベース内機械学習が有効になっておらず、時系列データに関連する異常を検出する必要があるシナリオに適用できます。 |
model_name | 値の予測に使用するモデルの名前。 説明
|
options | 検出効果を調整するために使用されるオプション。このパラメータは省略可能です。このパラメータの値は |
例
例 1: ESD アルゴリズムを使用して、sensor という名前の時系列テーブルの指定された時間範囲内の temperature データの異常を検出します。
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: ESD アルゴリズムを使用して、sensor テーブルの指定された時間範囲内にある F07A1260 デバイスの temperature データの異常を検出します。
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: ESD アルゴリズムを使用して、sensor テーブルの指定された時間範囲内にある F07A1260 デバイスの temperature データの異常を検出します。また、lenHistoryWindow オプションを 30 に、maxAnomalyRatio オプションを 0.1 に設定します。
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: データベース内機械学習機能で作成した異常検出モデルを使用して、センサーテーブル内の特定の期間における温度データの異常を検出します。
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 | 202-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
概要
この関数を呼び出して、時系列テーブルの指定されたフィールド列のデータに対して特徴量ビニングを実行できます。特徴量ビニングは、離散ビニングまたは離散バケットとも呼ばれ、データを前処理するために使用される手法です。
構文
BINS(field_name, options)
// 注意:BINS 関数は VARCHAR 値を返します。BINS 関数は VARCHAR 値を返します。
パラメータ
パラメータ | 必須 | 説明 |
field_name | はい | フィールド列の名前。 説明 指定されたフィールド列のデータは、VARCHAR 型または BOOLEAN 型にすることはできません。 |
options | いいえ | 機能ビニングポリシーと出力モード。 このパラメーターの値は、 |
例
例 1: sensor という名前の時系列テーブルの指定された時間範囲内の temperature データに対して特徴量ビニングを実行します。
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 という名前の時系列テーブルの指定された時間範囲内にある、ID が F07A1260 のデバイスの temperature データに対して特徴量ビニングを実行します。
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 という名前の時系列テーブルの指定された時間範囲内にある、ID が F07A1260 のデバイスの temperature データに対して特徴量ビニングを実行します。また、n_bins オプションを 2 に、output_type オプションを ordinal に、strategy オプションを uniform に指定します。
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 | +-----------+----------+--------------------------------+--------------------+