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
Ces fonctions s'appliquent uniquement à LindormTSDB.
Une version de LindormTSDB 3.4.7 ou ultérieure est requise. Pour les instructions de mise à niveau, consultez les Notes de version de LindormTSDB et la procédure de Mise à niveau de la version mineure du moteur d'une instance Lindorm.
Liste des fonctions
| Catégorie | Fonction | Description |
|---|---|---|
| Horodatage | CURRENT_TIMESTAMP | Renvoie l'heure système actuelle. |
| Agrégation | SUM | Calcule la somme des valeurs d'une colonne de champ. |
| Agrégation | AVG | Calcule la moyenne des valeurs d'une colonne de champ. |
| Agrégation | COUNT | Compte le nombre de valeurs d'une colonne de champ. |
| Sélection | MIN | Renvoie la valeur minimale d'une colonne de champ. |
| Sélection | MAX | Renvoie la valeur maximale d'une colonne de champ. |
| Sélection | FIRST | Renvoie la première valeur chronologique d'une colonne de champ. |
| Sélection | LAST | Renvoie la dernière valeur chronologique d'une colonne de champ. |
| Sélection | PERCENTILE | Renvoie la valeur correspondant à un centile spécifié dans une colonne de champ. |
| Conversion | RATE | Calcule le taux de variation (pente) entre les valeurs consécutives d'une colonne de champ. |
| Conversion | DELTA | Calcule la différence entre chaque valeur et la valeur précédente dans une colonne de champ. |
| Conversion | LATEST | Renvoie les N valeurs les plus récentes d'une colonne de champ. |
| IA | ANOMALY_DETECT | Détecte les anomalies dans une colonne de champ. |
| IA | BINS | Regroupe 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 champstemperatureethumidity.Série temporelle 2 :
device_id=F07A1261, region=south-cn, avec les champstemperatureethumidity.
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 20sregroupe 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
CURRENT_TIMESTAMPne 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_TIMESTAMPpour 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 :

où interval représente l'intervalle de temps spécifié en secondes.
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).
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 |
+-----------+----------+--------------------------------+--------------------+