Tous les produits
Search
Centre de documentation

Lindorm:Fonctions courantes des séries temporelles

Dernière mise à jour :Aug 11, 2026

LindormTSDB SQL prend en charge un ensemble de fonctions intégrées pour les données de séries temporelles, couvrant l'agrégation, la sélection, la conversion et l'analyse assistée par IA. Cette rubrique décrit la syntaxe, les paramètres et l'utilisation de chaque fonction à l'aide d'exemples exécutables.

Moteurs et versions applicables

Liste des fonctions

CatégorieFonctionDescription
HorodatageCURRENT_TIMESTAMPRenvoie l'heure système actuelle.
AgrégationSUMCalcule la somme des valeurs d'une colonne de champ.
AgrégationAVGCalcule la moyenne des valeurs d'une colonne de champ.
AgrégationCOUNTCompte le nombre de valeurs d'une colonne de champ.
SélectionMINRenvoie la valeur minimale d'une colonne de champ.
SélectionMAXRenvoie la valeur maximale d'une colonne de champ.
SélectionFIRSTRenvoie la première valeur chronologique d'une colonne de champ.
SélectionLASTRenvoie la dernière valeur chronologique d'une colonne de champ.
SélectionPERCENTILERenvoie la valeur correspondant à un centile spécifié dans une colonne de champ.
ConversionRATECalcule le taux de variation (pente) entre les valeurs consécutives d'une colonne de champ.
ConversionDELTACalcule la différence entre chaque valeur et la valeur précédente dans une colonne de champ.
ConversionLATESTRenvoie les N valeurs les plus récentes d'une colonne de champ.
IAANOMALY_DETECTDétecte les anomalies dans une colonne de champ.
IABINSRegroupe les valeurs d'une colonne de champ dans des intervalles (discrétisation des caractéristiques).

Préparation des données

Tous les exemples de cette rubrique utilisent une table nommée sensor avec le schéma suivant :

+-------------+-----------+------------+
| columnName  | typeName  | columnKind |
+-------------+-----------+------------+
| device_id   | VARCHAR   | TAG        |
| region      | VARCHAR   | TAG        |
| time        | TIMESTAMP | TIMESTAMP  |
| temperature | DOUBLE    | FIELD      |
| humidity    | DOUBLE    | FIELD      |
+-------------+-----------+------------+

La table contient les lignes suivantes :

+-----------+----------+---------------------------+-------------+-----------+
| 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 |
+-----------+----------+---------------------------+-------------+-----------+

La table comprend deux séries temporelles :

  • Série temporelle 1 : device_id=F07A1260, region=north-cn, avec les champs temperature et humidity.

  • Série temporelle 2 : device_id=F07A1261, region=south-cn, avec les champs temperature et humidity.

Pour plus d'informations sur les concepts liés aux séries temporelles, consultez la section Termes .

Modèles de requête

Les exemples de cette rubrique utilisent deux modèles SAMPLE BY, qui constituent une syntaxe SQL spécifique à LindormTSDB :

  • SAMPLE BY <interval> : sous-échantillonne les données en regroupant les lignes dans des fenêtres de temps fixes. Par exemple, SAMPLE BY 20s regroupe les lignes par intervalles de 20 secondes et applique la fonction d'agrégation à chaque intervalle.

  • SAMPLE BY 0 : agrège les données sur toute la plage temporelle pour chaque série temporelle sans sous-échantillonnage.

Fonction d'horodatage

CURRENT_TIMESTAMP

Renvoie l'heure système actuelle du serveur exécutant l'instance Lindorm.

Syntaxe

CURRENT_TIMESTAMP
Important
  • CURRENT_TIMESTAMP ne prend aucun paramètre.

  • L'horodatage renvoyé est précis à la milliseconde près. Exemple : 2023-04-23T21:13:15.819+08:00.

  • N'utilisez pas CURRENT_TIMESTAMP pour générer des horodatages lors d'écritures en production. Utilisez-le uniquement pour la génération de données de test.

Exemple

Insérez une ligne dans la table sensor en utilisant l'heure système actuelle comme horodatage :

INSERT INTO sensor(device_id, region, time, temperature, humidity)
VALUES ('F07A1262', 'north-cn', CURRENT_TIMESTAMP, 19.9, 42);

Fonctions d'agrégation

SUM

Calcule la somme des valeurs d'une colonne de champ. Renvoie un type DOUBLE ou BIGINT.

Syntaxe

SUM(field_name)

Paramètres

Paramètre Description
field_name Le nom de la colonne de champ. La colonne ne peut pas être de type VARCHAR ou BOOLEAN.

Exemples

Exemple 1 : Sous-échantillonnez par intervalles de 20 secondes, puis calculez la somme de temperature par intervalle et par appareil.

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;

Résultat :

+-----------+----------+---------------------------+-------------+
| 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   |
+-----------+----------+---------------------------+-------------+

Exemple 2 : Calculez la somme totale de temperature par appareil sur toute la plage temporelle.

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;

Résultat :

+-----------+----------+---------------------------+-------------+
| 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   |
+-----------+----------+---------------------------+-------------+

Exemple 3 : Calculez la somme totale de temperature pour tous les appareils.

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';

Résultat :

+-------------+
| temperature |
+-------------+
| 92.400000   |
+-------------+

AVG

Calcule la moyenne des valeurs d'une colonne de champ. Renvoie un type DOUBLE.

Syntaxe

AVG(field_name)

Paramètres

Paramètre Description
field_name Le nom de la colonne de champ. La colonne ne peut pas être de type VARCHAR ou BOOLEAN.

Exemples

Exemple 1 : Sous-échantillonnez par intervalles de 20 secondes, puis calculez la moyenne de temperature par intervalle et par appareil.

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;

Résultat :

+-----------+----------+---------------------------+-------------+
| 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   |
+-----------+----------+---------------------------+-------------+

Exemple 2 : Calculez la moyenne de temperature par appareil sur toute la plage temporelle.

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;

Résultat :

+-----------+----------+---------------------------+-------------+
| 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   |
+-----------+----------+---------------------------+-------------+

Exemple 3 : Calculez la moyenne de temperature pour tous les appareils.

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';

Résultat :

+-------------+
| temperature |
+-------------+
| 13.200000   |
+-------------+

COUNT

Compte le nombre de valeurs d'une colonne de champ. Renvoie un type BIGINT.

Syntaxe

COUNT(field_name)

Paramètres

Paramètre Description
field_name Le nom de la colonne de champ.

Exemples

Exemple 1 : Sous-échantillonnez par intervalles de 20 secondes, puis comptez les valeurs de temperature par intervalle et par appareil.

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;

Résultat :

+-----------+----------+---------------------------+-------------+
| 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           |
+-----------+----------+---------------------------+-------------+

Exemple 2 : Comptez le nombre total de valeurs de temperature par appareil sur toute la plage temporelle.

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;

Résultat :

+-----------+----------+---------------------------+-------------+
| 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           |
+-----------+----------+---------------------------+-------------+

Exemple 3 : Comptez le nombre total de valeurs de temperature pour tous les appareils.

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';

Résultat :

+-------------+
| temperature |
+-------------+
| 7           |
+-------------+

Fonctions de sélection

Les fonctions de sélection renvoient des lignes de données réelles plutôt que des scalaires calculés. Contrairement aux fonctions d'agrégation telles que SUM et AVG, les fonctions de sélection préservent la valeur d'origine — et dans certains cas l'horodatage associé — provenant des lignes sous-jacentes.

MIN

Renvoie la valeur minimale dans une colonne de champ. Le type de retour est DOUBLE ou BIGINT.

Syntaxe

MIN(field_name)

Paramètres

Paramètre Description
field_name Nom de la colonne de champ. La colonne ne peut pas être de type VARCHAR ou BOOLEAN.

Exemples

Exemple 1 : Rééchantillonnez par intervalles de 20 secondes, puis trouvez la température minimale temperature par intervalle et par appareil.

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;

Résultat :

+-----------+----------+---------------------------+-------------+
| 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   |
+-----------+----------+---------------------------+-------------+

Exemple 2 : Trouvez la température minimale temperature par appareil sur toute la plage temporelle.

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;

Résultat :

+-----------+----------+---------------------------+-------------+
| 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   |
+-----------+----------+---------------------------+-------------+

Exemple 3 : Trouvez la température minimale temperature pour tous les appareils.

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';

Résultat :

+-------------+
| temperature |
+-------------+
| 10.600000   |
+-------------+

MAX

Renvoie la valeur maximale dans une colonne de champ. Le type de retour est DOUBLE ou BIGINT.

Syntaxe

MAX(field_name)

Paramètres

Paramètre Description
field_name Nom de la colonne de champ. La colonne ne peut pas être de type VARCHAR ou BOOLEAN.

Exemples

Exemple 1 : Rééchantillonnez par intervalles de 20 secondes, puis trouvez la température maximale temperature par intervalle et par appareil.

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;

Résultat :

+-----------+----------+---------------------------+-------------+
| 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   |
+-----------+----------+---------------------------+-------------+

Exemple 2 : Trouvez la température maximale temperature par appareil sur toute la plage temporelle.

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;

Résultat :

+-----------+----------+---------------------------+-------------+
| 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   |
+-----------+----------+---------------------------+-------------+

Exemple 3 : Trouvez la température maximale temperature pour tous les appareils.

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';

Résultat :

+-------------+
| temperature |
+-------------+
| 20.600000   |
+-------------+

FIRST

Renvoie la première valeur (la plus ancienne) dans une colonne de champ au sein de la fenêtre de requête. Le type de retour correspond au type de la colonne de champ.

Syntaxe

FIRST(field_name)

Paramètres

Paramètre Description
field_name Nom de la colonne de champ.

Exemples

Exemple 1 : Rééchantillonnez par intervalles de 20 secondes, puis obtenez la première valeur de température temperature par intervalle et par appareil.

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;

Résultat :

+-----------+----------+---------------------------+-------------+
| 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   |
+-----------+----------+---------------------------+-------------+

Exemple 2 : Obtenez la première valeur de température temperature par appareil sur toute la plage temporelle.

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;

Résultat :

+-----------+----------+---------------------------+-------------+
| 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

Renvoie la valeur la plus récente dans une colonne de champ au sein de la fenêtre de requête. Le type de retour correspond au type de la colonne de champ.

Syntaxe

LAST(field_name)

Paramètres

Paramètre Description
field_name Nom de la colonne de champ.

Exemples

Exemple 1 : Rééchantillonnez par intervalles de 20 secondes, puis obtenez la dernière valeur de température temperature par intervalle et par appareil.

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;

Résultat :

+-----------+----------+---------------------------+-------------+
| 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   |
+-----------+----------+---------------------------+-------------+

Exemple 2 : Obtenez la dernière valeur de température temperature par appareil sur toute la plage temporelle.

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;

Résultat :

+-----------+----------+---------------------------+-------------+
| 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

Renvoie la valeur correspondant à un centile spécifié dans une colonne de champ. Le type de retour est DOUBLE.

Syntaxe

PERCENTILE(field_name, P)

Paramètres

Paramètre Description
field_name Nom de la colonne de champ. La colonne ne peut pas être de type VARCHAR ou BOOLEAN.
P Nombre entier ou à virgule flottante spécifiant le centile. Plage valide : 0 à 100. Valeur par défaut : 50.

Exemples

Exemple 1 : Rééchantillonnez par intervalles de 20 secondes, puis calculez le 90e centile de la température temperature par intervalle et par appareil.

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;

Résultat :

+-----------+----------+---------------------------+-------------+
| 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   |
+-----------+----------+---------------------------+-------------+

Exemple 2 : Calculez le 90e centile de la température temperature par appareil sur toute la plage temporelle.

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;

Résultat :

+-----------+----------+---------------------------+-------------+
| 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   |
+-----------+----------+---------------------------+-------------+

Fonctions de conversion

RATE

Calcule le taux de variation (pente) entre les valeurs consécutives d'une colonne de champ. Renvoie une valeur de type DOUBLE.

À partir des points de données (t1,v1), (t2,v2) ... (tN,vN), la fonction RATE génère N−1 points de sortie. L'horodatage et la valeur de chaque point de sortie sont calculés comme suit :

2023-03-20_10-29-38

où interval représente l'intervalle de temps spécifié en secondes.

Important

RATE doit être le seul agrégateur dans une instruction SQL. Il ne peut pas être combiné avec d'autres agrégateurs tels que AVG, DELTA ou LATEST au sein de la même requête.

Syntaxe

RATE(field_name, 'interval units')

Paramètres

Paramètre Description
field_name Nom de la colonne de champ. La colonne ne peut pas être de type VARCHAR ou BOOLEAN.
interval units Intervalle de temps utilisé pour le calcul de la pente. Valeur par défaut : 1s. Unités valides : s (secondes), m (minutes), h (heures), d (jours).

Exemples

Exemple 1 : Calculez le taux de variation par seconde de temperature pour chaque appareil.

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;

Résultat :

+-----------+----------+---------------------------+-------------+
| 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    |
+-----------+----------+---------------------------+-------------+

Exemple 2 : Calculez le taux de variation par minute de temperature pour chaque appareil.

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;

Résultat :

+-----------+----------+---------------------------+-------------+
| 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   |
+-----------+----------+---------------------------+-------------+

Exemple 3 : Effectuez un sous-échantillonnage par intervalles de 20 secondes, calculez la temperature moyenne par intervalle, puis déterminez le taux de variation par minute de ces moyennes.

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;

Résultat :

+-----------+----------+---------------------------+-------------+
| 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   |
+-----------+----------+---------------------------+-------------+

Exemple 4 : Les requêtes suivantes échouent car RATE ne peut pas être combiné avec d'autres agrégateurs.

-- Error: multiple aggregators in one statement
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
-- Error: mixing RATE with LATEST
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

Calcule la différence entre chaque valeur et la valeur précédente dans une colonne de champ. Renvoie une valeur de type DOUBLE.

À partir des points de données (t1,v1), (t2,v2) ... (tN,vN), la fonction DELTA génère N−1 points de sortie : (t2, v2−v1), (t3, v3−v2) ... (tN, vN−vN-1).

Important

DELTA doit être le seul agrégateur dans une instruction SQL. Il ne peut pas être combiné avec d'autres agrégateurs tels que AVG, RATE ou LATEST au sein de la même requête.

Syntaxe

DELTA(field_name)

Paramètres

Paramètre Description
field_name Nom de la colonne de champ. La colonne ne peut pas être de type VARCHAR ou BOOLEAN.

Exemples

Exemple 1 : Calculez les différences de temperature ligne par ligne pour chaque appareil.

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;

Résultat :

+-----------+----------+---------------------------+-------------+
| 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   |
+-----------+----------+---------------------------+-------------+

Exemple 2 : Effectuez un sous-échantillonnage par intervalles de 20 secondes, calculez la temperature moyenne par intervalle, puis déterminez les différences ligne par ligne de ces moyennes.

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;

Résultat :

+-----------+----------+---------------------------+-------------+
| 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    |
+-----------+----------+---------------------------+-------------+

Exemple 3 : La requête suivante échoue car DELTA ne peut pas être combiné avec d'autres agrégateurs.

-- Error: mixing DELTA with RATE
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

Renvoie les N valeurs les plus récentes d'une colonne de champ, triées par horodatage. Le type de retour correspond au type de la colonne de champ.

LATEST doit être le seul agrégateur dans une instruction SQL.

Syntaxe

LATEST(field_name, N)

Paramètres

Paramètre Description
field_name Nom de la colonne de champ.
N Entier spécifiant le nombre de valeurs les plus récentes à renvoyer. Valeur par défaut : 1.

Exemples

Exemple 1 : Obtenez la dernière valeur de temperature pour chaque appareil.

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;

Résultat :

+-----------+----------+---------------------------+-------------+
| 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   |
+-----------+----------+---------------------------+-------------+

Exemple 2 : Obtenez les deux valeurs de temperature les plus récentes pour chaque appareil.

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;

Résultat :

+-----------+----------+---------------------------+-------------+
| 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   |
+-----------+----------+---------------------------+-------------+

Exemple 3 : La requête suivante échoue car LATEST ne peut pas être combiné avec d'autres agrégateurs.

-- Error: mixing LATEST with RATE
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

Fonctions IA

FORECAST

Prédit les valeurs futures d'un champ dans une table de séries temporelles à l'aide d'un modèle entraîné. Renvoie un type DOUBLE.

Prérequis

La fonction FORECAST dépend de Lindorm AI. Activez Lindorm AI pour votre instance avant d'utiliser cette fonction.

Syntaxe

FORECAST(field_name, model_name, options)

Paramètres

Paramètre Obligatoire description
field_name Oui Nom de la colonne de champ. La colonne ne peut pas être de type VARCHAR ou BOOLEAN.
model_name Oui Nom du modèle entraîné. Doit être de type VARCHAR.
options Non Options de prédiction au format key1=value1[, key2=value2]. Consultez les options ci-dessous.

Options

Option Type Valeur par défaut description
batch_size INTEGER Nombre de séries temporelles lors de l'entraînement Nombre de séries temporelles par lot d'inférence. Une prédiction par lot est déclenchée lorsque le nombre de séries temporelles en cache atteint ce seuil.
step INTEGER Valeur de PREDICTION_LENGTH définie lors de l'entraînement Longueur du pas à laquelle les résultats de prédiction sont générés.
quantile_output DOUBLE 0,5 Percentile du résultat de prédiction généré. L'apprentissage automatique intégré à la base de données fournit un tableau de valeurs prédites par point de données ; quantile_output sélectionne une valeur dans ce tableau. Définissez ce paramètre en fonction de l'algorithme utilisé : pour DeepAR, utilisez une valeur comprise entre 0 et 1 ; pour TFT, utilisez 0,1, 0,5 ou 0,9.

Exemples

Exemple 1 : Prédire les valeurs de temperature sur une plage horaire spécifiée.

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;

Résultat :

+-----------+----------+---------------------------+------------------+
| 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     |
+-----------+----------+---------------------------+------------------+

Exemple 2 : Effectuer une prédiction avec step=2 et quantile_output=0.9 pour obtenir le 90e percentile de la prédiction tous les deux pas.

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;

Résultat :

+-----------+----------+---------------------------+------------------+
| 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

Détecte les anomalies dans une colonne de champ à l'aide d'un algorithme intégré ou d'un modèle entraîné. Renvoie un type BOOLEAN.

Syntaxe

ANOMALY_DETECT(field_name, [algo_name | model_name], options)

Paramètres

Paramètre Obligatoire description
field_name Oui Nom de la colonne de champ. La colonne ne peut pas être de type VARCHAR ou BOOLEAN.
algo_name Conditionnel Nom d'un algorithme intégré de DAMO Academy. Utilisez ce paramètre lorsque Lindorm AI n'est pas activé. Valeurs prises en charge : esd (détection des pics pour les courbes de surveillance), nsigma (analyse statistique simple des anomalies), ttest (détecte les anomalies causées par des décalages de la valeur moyenne), istl-esd (détection d'anomalies pour les données périodiques).
model_name Conditionnel Nom d'un modèle de détection d'anomalies entraîné. Doit être de type VARCHAR. Utilisez ce paramètre lorsque Lindorm AI est activé. Pour plus d'informations, consultez la section Activate Lindorm AI.
options Non Options de détection au format key1=value1[, key2=value2]. Pour connaître les options disponibles, consultez la rubrique Time series anomaly detection.

Exemples

Exemple 1 : Utiliser l'algorithme ESD pour détecter les anomalies dans les données de temperature pour tous les appareils.

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;

Résultat :

+-----------+----------+---------------------------+---------------+
| 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         |
+-----------+----------+---------------------------+---------------+

Exemple 2 : Utiliser ESD pour détecter les anomalies dans les données de temperature uniquement pour l'appareil F07A1260.

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;

Résultat :

+-----------+----------+---------------------------+---------------+
| 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          |
+-----------+----------+---------------------------+---------------+

Exemple 3 : Utiliser ESD avec des options personnalisées — définissez lenHistoryWindow sur 30 et maxAnomalyRatio sur 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;

Résultat :

+-----------+----------+---------------------------+---------------+
| 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          |
+-----------+----------+---------------------------+---------------+

Exemple 4 : Utiliser un modèle entraîné de Lindorm AI pour détecter les anomalies.

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;

Résultat :

+-----------+----------+---------------------------+-------------+---------------+
| 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

Regroupe les valeurs d'une colonne de champ dans des intervalles (discrétisation des caractéristiques). La discrétisation des caractéristiques, également appelée binning discret ou bucketing, est une technique de prétraitement des données. Renvoie un type VARCHAR.

Syntaxe

BINS(field_name, options)

Paramètres

Paramètre Obligatoire description
field_name Oui Nom de la colonne de champ. La colonne ne peut pas être de type VARCHAR ou BOOLEAN.
options Non Politique de discrétisation et format de sortie au format key1=value1, key2=value2.

Exemples

Exemple 1 : Regrouper toutes les valeurs de temperature dans la plage horaire spécifiée en intervalles.

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;

Résultat :

+-----------+----------+--------------------------------+--------------------+
| 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]   |
+-----------+-----------+-------------------------------+--------------------+

Exemple 2 : Regrouper les valeurs de temperature pour l'appareil F07A1260 en intervalles.

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;

Résultat :

+-----------+----------+--------------------------------+--------------------+
| 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)   |
+-----------+----------+--------------------------------+--------------------+

Exemple 3 : Regrouper les valeurs de temperature pour l'appareil F07A1260 en 2 intervalles uniformes et générer des libellés ordinaux.

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;

Résultat :

+-----------+----------+--------------------------------+--------------------+
| 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                 |
+-----------+----------+--------------------------------+--------------------+