LindormTSDB SQL; toplama, seçme, dönüştürme ve yapay zeka destekli analizi kapsayan bir dizi yerleşik zaman serisi işlevini destekler. Bu sayfada her bir işlevin sözdizimi, parametreleri ve çalıştırılabilir örneklerle kullanımı açıklanmaktadır.
Uygulanabilen altyapılar ve sürümler
Bu işlevler yalnızca LindormTSDB için geçerlidir.
LindormTSDB 3.4.7 veya sonraki bir sürüm gereklidir. Yükseltme talimatları için bkz. LindormTSDB Sürüm Notları ve Bir Lindorm Örneğinin Küçük Altyapı Sürümünü Yükseltme.
İşlev listesi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Veri hazırlığı
Bu sayfadaki tüm örnekler aşağıdaki şemaya sahip sensor adlı bir tablo kullanır:
+-------------+-----------+------------+
| columnName | typeName | columnKind |
+-------------+-----------+------------+
| device_id | VARCHAR | TAG |
| region | VARCHAR | TAG |
| time | TIMESTAMP | TIMESTAMP |
| temperature | DOUBLE | FIELD |
| humidity | DOUBLE | FIELD |
+-------------+-----------+------------+
Tablo şu satırları içerir:
+-----------+----------+---------------------------+-------------+-----------+
| 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 |
+-----------+----------+---------------------------+-------------+-----------+
Tabloda iki zaman serisi bulunur:
Zaman serisi 1:
device_id=F07A1260, region=north-cn,temperaturevehumidityalanlarına sahiptir.Zaman serisi 2:
device_id=F07A1261, region=south-cn,temperaturevehumidityalanlarına sahiptir.
Zaman serisi kavramları hakkında daha fazla bilgi için bkz. Terimler .
Sorgu kalıpları
Bu sayfadaki örneklerde, her ikisi de LindormTSDB'ye özgü SQL sözdizimi olan iki SAMPLE BY kalıbı kullanılır:
SAMPLE BY <interval>— satırları sabit zaman pencerelerine gruplayarak verileri alt örnekleme yoluyla azaltır. Örneğin,SAMPLE BY 20ssatırları 20 saniyelik aralıklara gruplar ve her aralık için toplama işlevini uygular.SAMPLE BY 0— alt örnekleme yapmadan her zaman serisi için tam zaman aralığında toplama işlemi gerçekleştirir.
Zaman damgası işlevi
CURRENT_TIMESTAMP
Lindorm örneğini çalıştıran sunucudan geçerli sistem saatini döndürür.
Sözdizimi
CURRENT_TIMESTAMP
CURRENT_TIMESTAMPparametre almaz.Döndürülen zaman damgası milisaniye düzeyinde hassastır. Örnek:
2023-04-23T21:13:15.819+08:00.Üretim ortamındaki yazma işlemleri için zaman damgası oluşturmak amacıyla
CURRENT_TIMESTAMPkullanmayın. Yalnızca test verisi oluşturmak için kullanın.
Örnek
Zaman damgası olarak geçerli sistem saatini kullanarak sensor tablosuna bir satır ekleyin:
INSERT INTO sensor(device_id, region, time, temperature, humidity)
VALUES ('F07A1262', 'north-cn', CURRENT_TIMESTAMP, 19.9, 42);
Toplama işlevleri
SUM
Bir alan sütunundaki değerlerin toplamını hesaplar. DOUBLE veya BIGINT döndürür.
Sözdizimi
SUM(field_name)
Parametreler
|
|
|
|
|
|
Örnekler
Örnek 1: 20 saniyelik aralıklarla alt örnekleme yapın, ardından cihaz başına aralık bazında temperature toplamını hesaplayın.
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;
Sonuç:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Örnek 2: Tam zaman aralığında cihaz başına toplam temperature toplamını hesaplayın.
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;
Sonuç:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Örnek 3: Tüm cihazlardaki toplam temperature toplamını hesaplayın.
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';
Sonuç:
+-------------+
| temperature |
+-------------+
| 92.400000 |
+-------------+
AVG
Bir alan sütunundaki değerlerin ortalamasını hesaplar. DOUBLE döndürür.
Sözdizimi
AVG(field_name)
Parametreler
|
|
|
|
|
|
Örnekler
Örnek 1: 20 saniyelik aralıklarla alt örnekleme yapın, ardından cihaz başına aralık bazında ortalama temperature değerini hesaplayın.
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;
Sonuç:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Örnek 2: Tam zaman aralığında cihaz başına ortalama temperature değerini hesaplayın.
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;
Sonuç:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Örnek 3: Tüm cihazlarda ortalama temperature değerini hesaplayın.
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';
Sonuç:
+-------------+
| temperature |
+-------------+
| 13.200000 |
+-------------+
COUNT
Bir alan sütunundaki değer sayısını döndürür. BIGINT döndürür.
Sözdizimi
COUNT(field_name)
Parametreler
|
|
|
|
|
|
Örnekler
Örnek 1: 20 saniyelik aralıklarla alt örnekleme yapın, ardından cihaz başına aralık bazında temperature değerlerini sayın.
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;
Sonuç:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Örnek 2: Tam zaman aralığında cihaz başına toplam temperature değer sayısını hesaplayın.
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;
Sonuç:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Örnek 3: Tüm cihazlardaki toplam temperature değer sayısını hesaplayın.
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';
Sonuç:
+-------------+
| temperature |
+-------------+
| 7 |
+-------------+
Seçme işlevleri
Seçme işlevleri, hesaplanan skaler değerler yerine gerçek veri satırlarını döndürür. SUM ve AVG gibi toplama işlevlerinden farklı olarak, seçme işlevleri temel satırlardaki orijinal değeri ve bazı durumlarda ilişkili zaman damgasını korur.
MIN
Bir alan sütunundaki en küçük değeri döndürür. DOUBLE veya BIGINT döndürür.
Sözdizimi
MIN(field_name)
Parametreler
|
|
|
|
|
|
Örnekler
Örnek 1: 20 saniyelik aralıklarla alt örnekleme yapın, ardından cihaz başına aralık bazında minimum temperature değerini bulun.
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;
Sonuç:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Örnek 2: Tam zaman aralığında cihaz başına minimum temperature değerini bulun.
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;
Sonuç:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Örnek 3: Tüm cihazlarda minimum temperature değerini bulun.
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';
Sonuç:
+-------------+
| temperature |
+-------------+
| 10.600000 |
+-------------+
MAX
Bir alan sütunundaki en büyük değeri döndürür. DOUBLE veya BIGINT döndürür.
Sözdizimi
MAX(field_name)
Parametreler
|
|
|
|
|
|
Örnekler
Örnek 1: 20 saniyelik aralıklarla alt örnekleme yapın, ardından cihaz başına aralık bazında maksimum temperature değerini bulun.
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;
Sonuç:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Örnek 2: Tam zaman aralığında cihaz başına maksimum temperature değerini bulun.
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;
Sonuç:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Örnek 3: Tüm cihazlarda maksimum temperature değerini bulun.
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';
Sonuç:
+-------------+
| temperature |
+-------------+
| 20.600000 |
+-------------+
FIRST
Sorgu penceresi içinde bir alan sütunundaki en eski değeri döndürür. Dönüş türü alan sütunu türüyle eşleşir.
Sözdizimi
FIRST(field_name)
Parametreler
|
|
|
|
|
|
Örnekler
Örnek 1: 20 saniyelik aralıklarla alt örnekleme yapın, ardından cihaz başına aralık bazında ilk temperature değerini alın.
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;
Sonuç:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Örnek 2: Tam zaman aralığında cihaz başına ilk temperature değerini alın.
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;
Sonuç:
+-----------+----------+---------------------------+-------------+
| 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
Sorgu penceresi içinde bir alan sütunundaki en yeni değeri döndürür. Dönüş türü alan sütunu türüyle eşleşir.
Sözdizimi
LAST(field_name)
Parametreler
|
|
|
|
|
|
Örnekler
Örnek 1: 20 saniyelik aralıklarla alt örnekleme yapın, ardından cihaz başına aralık bazında son temperature değerini alın.
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;
Sonuç:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Örnek 2: Tam zaman aralığında cihaz başına son temperature değerini alın.
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;
Sonuç:
+-----------+----------+---------------------------+-------------+
| 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
Bir alan sütununda belirtilen yüzdelik dilime karşılık gelen değeri döndürür. DOUBLE döndürür.
Sözdizimi
PERCENTILE(field_name, P)
Parametreler
|
|
|
|
|
|
|
|
|
Örnekler
Örnek 1: 20 saniyelik aralıklarla alt örnekleme yapın, ardından cihaz başına aralık bazında temperature değerlerinin 90. yüzdelik dilimini hesaplayın.
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;
Sonuç:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Örnek 2: Tam zaman aralığında cihaz başına temperature değerlerinin 90. yüzdelik dilimini hesaplayın.
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;
Sonuç:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Dönüştürme işlevleri
RATE
Bir alan sütununda ardışık değerler arasındaki değişim oranını (eğim) hesaplar. DOUBLE döndürür.
(t1,v1), (t2,v2) ... (tN,vN) veri noktaları verildiğinde, RATE N−1 çıktı noktası üretir. Her çıktı zaman damgası ve değeri şu şekilde hesaplanır:

burada interval saniye cinsinden belirtilen zaman aralığıdır.
RATE, bir SQL ifadesindeki tek toplayıcı olmalıdır. Aynı sorguda AVG, DELTA veya LATEST gibi diğer toplayıcılarla birlikte kullanılamaz.
Sözdizimi
RATE(field_name, 'interval units')
Parametreler
|
|
|
|
|
|
|
|
|
Örnekler
Örnek 1: Her cihaz için temperature değerlerinin saniye başına değişim oranını hesaplayın.
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;
Sonuç:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Örnek 2: Her cihaz için temperature değerlerinin dakika başına değişim oranını hesaplayın.
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;
Sonuç:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Örnek 3: 20 saniyelik aralıklarla alt örnekleme yapın, aralık başına ortalama temperature değerini hesaplayın, ardından bu ortalamaların dakika başına değişim oranını hesaplayın.
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;
Sonuç:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Örnek 4: RATE başka toplayıcılarla birleştirilemediği için aşağıdaki sorgular başarısız olur.
-- 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
Bir alan sütununda her değer ile önceki değer arasındaki farkı hesaplar. DOUBLE döndürür.
(t1,v1), (t2,v2) ... (tN,vN) veri noktaları verildiğinde, DELTA N−1 çıktı noktası üretir: (t2, v2−v1), (t3, v3−v2) ... (tN, vN−vN-1).
DELTA, bir SQL ifadesindeki tek toplayıcı olmalıdır. Aynı sorguda AVG, RATE veya LATEST gibi diğer toplayıcılarla birlikte kullanılamaz.
Sözdizimi
DELTA(field_name)
Parametreler
|
|
|
|
|
|
Örnekler
Örnek 1: Her cihaz için satır bazında temperature farklarını hesaplayın.
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;
Sonuç:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Örnek 2: 20 saniyelik aralıklarla alt örnekleme yapın, aralık başına ortalama temperature değerini hesaplayın, ardından bu ortalamaların satır bazında farklarını hesaplayın.
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;
Sonuç:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Örnek 3: DELTA başka toplayıcılarla birleştirilemediği için aşağıdaki sorgu başarısız olur.
-- 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
Bir alan sütunundaki en son N değeri, zaman damgasına göre sıralanmış şekilde döndürür. Dönüş türü alan sütunu türüyle eşleşir.
LATEST, bir SQL ifadesindeki tek toplayıcı olmalıdır.
Sözdizimi
LATEST(field_name, N)
Parametreler
|
|
|
|
|
|
|
|
|
Örnekler
Örnek 1: Her cihaz için en son temperature değerini alın.
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;
Sonuç:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Örnek 2: Her cihaz için en son iki temperature değerini alın.
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;
Sonuç:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Örnek 3: LATEST başka toplayıcılarla birleştirilemediği için aşağıdaki sorgu başarısız olur.
-- 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
Yapay zeka işlevleri
FORECAST
Eğitilmiş bir model kullanarak bir zaman serisi tablosundaki gelecekteki alan değerlerini tahmin eder. DOUBLE döndürür.
Ön Koşullar
FORECAST, Lindorm AI'a bağlıdır. Bu işlevi kullanmadan önce örneğiniz için Lindorm AI'ı etkinleştirin.
Sözdizimi
FORECAST(field_name, model_name, options)
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Seçenekler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Örnekler
Örnek 1: Belirli bir zaman aralığındaki temperature değerlerini tahmin edin.
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;
Sonuç:
+-----------+----------+---------------------------+------------------+
| 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 |
+-----------+----------+---------------------------+------------------+
Örnek 2: Her diğer adımda 90. yüzdelik dilim tahmini almak için step=2 ve quantile_output=0.9 ile tahmin yapın.
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;
Sonuç:
+-----------+----------+---------------------------+------------------+
| 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
Yerleşik bir algoritma veya eğitilmiş bir model kullanarak bir alan sütunundaki anomalileri algılar. BOOLEAN döndürür.
Sözdizimi
ANOMALY_DETECT(field_name, [algo_name | model_name], options)
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Örnekler
Örnek 1: Tüm cihazlardaki temperature verilerindeki anomalileri algılamak için ESD algoritmasını kullanın.
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;
Sonuç:
+-----------+----------+---------------------------+---------------+
| 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 |
+-----------+----------+---------------------------+---------------+
Örnek 2: Yalnızca F07A1260 cihazındaki temperature verilerindeki anomalileri algılamak için ESD'yi kullanın.
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;
Sonuç:
+-----------+----------+---------------------------+---------------+
| 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 |
+-----------+----------+---------------------------+---------------+
Örnek 3: Özel seçeneklerle ESD'yi kullanın — lenHistoryWindow değerini 30, maxAnomalyRatio değerini ise 0,1 olarak ayarlayın.
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;
Sonuç:
+-----------+----------+---------------------------+---------------+
| 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 |
+-----------+----------+---------------------------+---------------+
Örnek 4: Anomalileri algılamak için Lindorm AI'dan eğitilmiş bir model kullanın.
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;
Sonuç:
+-----------+----------+---------------------------+-------------+---------------+
| 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
Bir alan sütunundaki değerleri gruplara ayırır (özellik gruplama). Özellik gruplama — ayrık gruplama veya paketleme olarak da bilinir — bir veri ön işleme tekniğidir. VARCHAR döndürür.
Sözdizimi
BINS(field_name, options)
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
Örnekler
Örnek 1: Belirtilen zaman aralığındaki tüm temperature değerlerini gruplara ayırın.
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;
Sonuç:
+-----------+----------+--------------------------------+--------------------+
| 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] |
+-----------+-----------+-------------------------------+--------------------+
Örnek 2: F07A1260 cihazındaki temperature değerlerini gruplara ayırın.
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;
Sonuç:
+-----------+----------+--------------------------------+--------------------+
| 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) |
+-----------+----------+--------------------------------+--------------------+
Örnek 3: F07A1260 cihazındaki temperature değerlerini 2 eşit gruba ayırın ve sıralı etiketleri çıktılayın.
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;
Sonuç:
+-----------+----------+--------------------------------+--------------------+
| 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 |
+-----------+----------+--------------------------------+--------------------+