O SQL do LindormTSDB oferece um conjunto de funções integradas para dados de séries temporais, abrangendo agregação, seleção, conversão e análise com IA. Esta página descreve a sintaxe, os parâmetros e o uso de cada função, com exemplos executáveis.
Engines e versões aplicáveis
Essas funções se aplicam exclusivamente ao LindormTSDB.
É necessário usar o LindormTSDB 3.4.7 ou posterior. Para obter instruções de atualização, consulte Notas de versão do LindormTSDB e Atualizar a versão secundária da engine de uma instância Lindorm.
Lista de funções
|
Categoria |
Função |
Descrição |
|
Timestamp |
CURRENT_TIMESTAMP |
Retorna a hora atual do sistema. |
|
Agregação |
SUM |
Calcula a soma dos valores em uma coluna de campo. |
|
Agregação |
AVG |
Calcula a média dos valores em uma coluna de campo. |
|
Agregação |
COUNT |
Conta o número de valores em uma coluna de campo. |
|
Seleção |
MIN |
Retorna o valor mínimo em uma coluna de campo. |
|
Seleção |
MAX |
Retorna o valor máximo em uma coluna de campo. |
|
Seleção |
FIRST |
Retorna o valor mais antigo em uma coluna de campo. |
|
Seleção |
LAST |
Retorna o valor mais recente em uma coluna de campo. |
|
Seleção |
PERCENTILE |
Retorna o valor em um percentil especificado em uma coluna de campo. |
|
Conversão |
RATE |
Calcula a taxa de variação (inclinação) entre valores consecutivos em uma coluna de campo. |
|
Conversão |
DELTA |
Calcula a diferença entre cada valor e o valor anterior em uma coluna de campo. |
|
Conversão |
LATEST |
Retorna os N valores mais recentes em uma coluna de campo. |
|
IA |
ANOMALY_DETECT |
Detecta anomalias em uma coluna de campo. |
|
IA |
BINS |
Agrupa valores de uma coluna de campo em intervalos (binning de recursos). |
Preparação de dados
Todos os exemplos desta página utilizam uma tabela chamada sensor com o seguinte esquema:
+-------------+-----------+------------+
| columnName | typeName | columnKind |
+-------------+-----------+------------+
| device_id | VARCHAR | TAG |
| region | VARCHAR | TAG |
| time | TIMESTAMP | TIMESTAMP |
| temperature | DOUBLE | FIELD |
| humidity | DOUBLE | FIELD |
+-------------+-----------+------------+
A tabela contém as seguintes linhas:
+-----------+----------+---------------------------+-------------+-----------+
| 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 |
+-----------+----------+---------------------------+-------------+-----------+
A tabela possui duas séries temporais:
Série temporal 1:
device_id=F07A1260, region=north-cn, com os campostemperatureehumidity.Série temporal 2:
device_id=F07A1261, region=south-cn, com os campostemperatureehumidity.
Para mais informações sobre conceitos de séries temporais, consulte Termos .
Padrões de consulta
Os exemplos nesta página usam dois padrões de SAMPLE BY, ambos específicos da sintaxe SQL do LindormTSDB:
SAMPLE BY <interval>— reduz a amostragem dos dados agrupando linhas em janelas de tempo fixas. Por exemplo,SAMPLE BY 20sagrupa as linhas em intervalos de 20 segundos e aplica a função de agregação a cada intervalo.SAMPLE BY 0— agrega dados em todo o intervalo de tempo de cada série temporal, sem reduzir a amostragem.
Função de timestamp
CURRENT_TIMESTAMP
Retorna a hora atual do sistema no servidor que executa a instância Lindorm.
Sintaxe
CURRENT_TIMESTAMP
CURRENT_TIMESTAMPnão aceita parâmetros.O timestamp retornado tem precisão de milissegundos. Exemplo:
2023-04-23T21:13:15.819+08:00.Não utilize
CURRENT_TIMESTAMPpara gerar timestamps em gravações de produção. Use-a apenas para gerar dados de teste.
Exemplo
Insira uma linha na tabela sensor usando a hora atual do sistema como timestamp:
INSERT INTO sensor(device_id, region, time, temperature, humidity)
VALUES ('F07A1262', 'north-cn', CURRENT_TIMESTAMP, 19.9, 42);
Funções de agregação
SUM
Calcula a soma dos valores em uma coluna de campo. Retorna DOUBLE ou BIGINT.
Sintaxe
SUM(field_name)
Parâmetros
|
Parâmetro |
Descrição |
|
|
Nome da coluna de campo. A coluna não pode ser do tipo VARCHAR ou BOOLEAN. |
Exemplos
Exemplo 1: Reduza a amostragem em intervalos de 20 segundos e calcule a soma de temperature por intervalo e por dispositivo.
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;
Resultado:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Exemplo 2: Calcule a soma total de temperature por dispositivo em todo o intervalo de tempo.
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;
Resultado:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Exemplo 3: Calcule a soma total de temperature em todos os dispositivos.
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';
Resultado:
+-------------+
| temperature |
+-------------+
| 92.400000 |
+-------------+
AVG
Calcula a média dos valores em uma coluna de campo. Retorna DOUBLE.
Sintaxe
AVG(field_name)
Parâmetros
|
Parâmetro |
Descrição |
|
|
Nome da coluna de campo. A coluna não pode ser do tipo VARCHAR ou BOOLEAN. |
Exemplos
Exemplo 1: Reduza a amostragem em intervalos de 20 segundos e calcule a média de temperature por intervalo e por dispositivo.
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;
Resultado:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Exemplo 2: Calcule a média de temperature por dispositivo em todo o intervalo de tempo.
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;
Resultado:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Exemplo 3: Calcule a média de temperature em todos os dispositivos.
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';
Resultado:
+-------------+
| temperature |
+-------------+
| 13.200000 |
+-------------+
COUNT
Conta o número de valores em uma coluna de campo. Retorna BIGINT.
Sintaxe
COUNT(field_name)
Parâmetros
|
Parâmetro |
Descrição |
|
|
Nome da coluna de campo. |
Exemplos
Exemplo 1: Reduza a amostragem em intervalos de 20 segundos e conte os valores de temperature por intervalo e por dispositivo.
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;
Resultado:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Exemplo 2: Conte o total de valores de temperature por dispositivo em todo o intervalo de tempo.
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;
Resultado:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Exemplo 3: Conte o total de valores de temperature em todos os dispositivos.
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';
Resultado:
+-------------+
| temperature |
+-------------+
| 7 |
+-------------+
Funções de seleção
As funções de seleção retornam linhas de dados reais em vez de escalares calculados. Diferentemente das funções de agregação, como SUM e AVG, as funções de seleção preservam o valor original — e, em alguns casos, o timestamp associado — das linhas subjacentes.
MIN
Retorna o valor mínimo em uma coluna de campo. Retorna DOUBLE ou BIGINT.
Sintaxe
MIN(field_name)
Parâmetros
|
Parâmetro |
Descrição |
|
|
Nome da coluna de campo. A coluna não pode ser do tipo VARCHAR ou BOOLEAN. |
Exemplos
Exemplo 1: Reduza a amostragem em intervalos de 20 segundos e encontre o valor mínimo de temperature por intervalo e por dispositivo.
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;
Resultado:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Exemplo 2: Encontre o valor mínimo de temperature por dispositivo em todo o intervalo de tempo.
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;
Resultado:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Exemplo 3: Encontre o valor mínimo de temperature em todos os dispositivos.
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';
Resultado:
+-------------+
| temperature |
+-------------+
| 10.600000 |
+-------------+
MAX
Retorna o valor máximo em uma coluna de campo. Retorna DOUBLE ou BIGINT.
Sintaxe
MAX(field_name)
Parâmetros
|
Parâmetro |
Descrição |
|
|
Nome da coluna de campo. A coluna não pode ser do tipo VARCHAR ou BOOLEAN. |
Exemplos
Exemplo 1: Reduza a amostragem em intervalos de 20 segundos e encontre o valor máximo de temperature por intervalo e por dispositivo.
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;
Resultado:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Exemplo 2: Encontre o valor máximo de temperature por dispositivo em todo o intervalo de tempo.
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;
Resultado:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Exemplo 3: Encontre o valor máximo de temperature em todos os dispositivos.
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';
Resultado:
+-------------+
| temperature |
+-------------+
| 20.600000 |
+-------------+
FIRST
Retorna o valor mais antigo em uma coluna de campo dentro da janela de consulta. O tipo de retorno corresponde ao tipo da coluna de campo.
Sintaxe
FIRST(field_name)
Parâmetros
|
Parâmetro |
Descrição |
|
|
Nome da coluna de campo. |
Exemplos
Exemplo 1: Reduza a amostragem em intervalos de 20 segundos e obtenha o primeiro valor de temperature por intervalo e por dispositivo.
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;
Resultado:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Exemplo 2: Obtenha o primeiro valor de temperature por dispositivo em todo o intervalo de tempo.
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;
Resultado:
+-----------+----------+---------------------------+-------------+
| 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
Retorna o valor mais recente em uma coluna de campo dentro da janela de consulta. O tipo de retorno corresponde ao tipo da coluna de campo.
Sintaxe
LAST(field_name)
Parâmetros
|
Parâmetro |
Descrição |
|
|
Nome da coluna de campo. |
Exemplos
Exemplo 1: Reduza a amostragem em intervalos de 20 segundos e obtenha o último valor de temperature por intervalo e por dispositivo.
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;
Resultado:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Exemplo 2: Obtenha o último valor de temperature por dispositivo em todo o intervalo de tempo.
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;
Resultado:
+-----------+----------+---------------------------+-------------+
| 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
Retorna o valor em um percentil especificado em uma coluna de campo. Retorna DOUBLE.
Sintaxe
PERCENTILE(field_name, P)
Parâmetros
|
Parâmetro |
Descrição |
|
|
Nome da coluna de campo. A coluna não pode ser do tipo VARCHAR ou BOOLEAN. |
|
|
Um número inteiro ou de ponto flutuante que especifica o percentil. Intervalo válido: 0 a 100. Padrão: 50. |
Exemplos
Exemplo 1: Reduza a amostragem em intervalos de 20 segundos e calcule o 90º percentil de temperature por intervalo e por dispositivo.
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;
Resultado:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Exemplo 2: Calcule o 90º percentil de temperature por dispositivo em todo o intervalo de tempo.
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;
Resultado:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Funções de conversão
RATE
Calcula a taxa de variação (inclinação) entre valores consecutivos em uma coluna de campo. Retorna DOUBLE.
Dados os pontos (t1,v1), (t2,v2) ... (tN,vN), RATE produz N−1 pontos de saída. Cada timestamp e valor de saída são calculados da seguinte forma:

onde interval é o intervalo de tempo especificado em segundos.
RATE deve ser o único agregador em uma instrução SQL. Não é possível combiná-lo com outros agregadores, como AVG, DELTA ou LATEST, na mesma consulta.
Sintaxe
RATE(field_name, 'interval units')
Parâmetros
|
Parâmetro |
Descrição |
|
|
Nome da coluna de campo. A coluna não pode ser do tipo VARCHAR ou BOOLEAN. |
|
|
Intervalo de tempo para cálculo da inclinação. Padrão: |
Exemplos
Exemplo 1: Calcule a taxa de variação por segundo de temperature para cada dispositivo.
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;
Resultado:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Exemplo 2: Calcule a taxa de variação por minuto de temperature para cada dispositivo.
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;
Resultado:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Exemplo 3: Reduza a amostragem em intervalos de 20 segundos, calcule a média de temperature por intervalo e, em seguida, calcule a taxa de variação por minuto dessas médias.
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;
Resultado:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Exemplo 4: As consultas a seguir falham porque RATE não pode ser combinado com outros agregadores.
-- 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
Calcula a diferença entre cada valor e o valor anterior em uma coluna de campo. Retorna DOUBLE.
Dados os pontos (t1,v1), (t2,v2) ... (tN,vN), DELTA produz N−1 pontos de saída: (t2, v2−v1), (t3, v3−v2) ... (tN, vN−vN-1).
DELTA deve ser o único agregador em uma instrução SQL. Não é possível combiná-lo com outros agregadores, como AVG, RATE ou LATEST, na mesma consulta.
Sintaxe
DELTA(field_name)
Parâmetros
|
Parâmetro |
Descrição |
|
|
Nome da coluna de campo. A coluna não pode ser do tipo VARCHAR ou BOOLEAN. |
Exemplos
Exemplo 1: Calcule as diferenças linha a linha de temperature para cada dispositivo.
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;
Resultado:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Exemplo 2: Reduza a amostragem em intervalos de 20 segundos, calcule a média de temperature por intervalo e, em seguida, calcule as diferenças linha a linha dessas médias.
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;
Resultado:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Exemplo 3: A consulta a seguir falha porque DELTA não pode ser combinado com outros agregadores.
-- 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
Retorna os N valores mais recentes em uma coluna de campo, ordenados por timestamp. O tipo de retorno corresponde ao tipo da coluna de campo.
LATEST deve ser o único agregador em uma instrução SQL.
Sintaxe
LATEST(field_name, N)
Parâmetros
|
Parâmetro |
Descrição |
|
|
Nome da coluna de campo. |
|
|
Um número inteiro que especifica a quantidade de valores mais recentes a serem retornados. Padrão: 1. |
Exemplos
Exemplo 1: Obtenha o valor mais recente de temperature para cada dispositivo.
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;
Resultado:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Exemplo 2: Obtenha os dois valores mais recentes de temperature para cada dispositivo.
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;
Resultado:
+-----------+----------+---------------------------+-------------+
| 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 |
+-----------+----------+---------------------------+-------------+
Exemplo 3: A consulta a seguir falha porque LATEST não pode ser combinado com outros agregadores.
-- 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
Funções de IA
FORECAST
Prevê valores futuros de campos em uma tabela de séries temporais usando um modelo treinado. Retorna DOUBLE.
Pré-requisitos
FORECAST depende do Lindorm AI. Ative o Lindorm AI na sua instância antes de usar esta função.
Sintaxe
FORECAST(field_name, model_name, options)
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Nome da coluna de campo. A coluna não pode ser do tipo VARCHAR ou BOOLEAN. |
|
|
Sim |
Nome do modelo treinado. Deve ser do tipo VARCHAR. |
|
|
Não |
Opções de previsão no formato |
Opções
|
Opção |
Tipo |
Padrão |
Descrição |
|
|
INTEGER |
Número de séries temporais no treinamento |
Número de séries temporais por lote de inferência. Quando as séries temporais em cache atingem essa contagem, uma previsão em lote é acionada. |
|
|
INTEGER |
Valor de |
Tamanho do passo no qual os resultados da previsão são gerados. |
|
|
DOUBLE |
0,5 |
Percentil do resultado da previsão de saída. O machine learning no banco de dados fornece um array de valores previstos por ponto de dados; |
Exemplos
Exemplo 1: Preveja valores de temperature dentro de um intervalo de tempo especificado.
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;
Resultado:
+-----------+----------+---------------------------+------------------+
| 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 |
+-----------+----------+---------------------------+------------------+
Exemplo 2: Faça uma previsão com step=2 e quantile_output=0.9 para obter a previsão do 90º percentil a cada dois passos.
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;
Resultado:
+-----------+----------+---------------------------+------------------+
| 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
Detecta anomalias em uma coluna de campo usando um algoritmo integrado ou um modelo treinado. Retorna BOOLEAN.
Sintaxe
ANOMALY_DETECT(field_name, [algo_name | model_name], options)
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Nome da coluna de campo. A coluna não pode ser do tipo VARCHAR ou BOOLEAN. |
|
|
Condicional |
Nome de um algoritmo integrado da DAMO Academy. Use este parâmetro quando o Lindorm AI não estiver ativado. Valores suportados: |
|
|
Condicional |
Nome de um modelo treinado de detecção de anomalias. Deve ser do tipo VARCHAR. Use este parâmetro quando o Lindorm AI estiver ativado. Para mais informações, consulte Ativar Lindorm AI. |
|
|
Não |
Opções de detecção no formato |
Exemplos
Exemplo 1: Use o algoritmo ESD para detectar anomalias nos dados de temperature em todos os dispositivos.
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;
Resultado:
+-----------+----------+---------------------------+---------------+
| 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 |
+-----------+----------+---------------------------+---------------+
Exemplo 2: Use ESD para detectar anomalias nos dados de temperature apenas do dispositivo 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;
Resultado:
+-----------+----------+---------------------------+---------------+
| 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 |
+-----------+----------+---------------------------+---------------+
Exemplo 3: Use ESD com opções personalizadas — defina lenHistoryWindow como 30 e maxAnomalyRatio como 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;
Resultado:
+-----------+----------+---------------------------+---------------+
| 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 |
+-----------+----------+---------------------------+---------------+
Exemplo 4: Use um modelo treinado do Lindorm AI para detectar anomalias.
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;
Resultado:
+-----------+----------+---------------------------+-------------+---------------+
| 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
Agrupa valores de uma coluna de campo em intervalos (binning de recursos). O binning de recursos — também conhecido como binning discreto ou bucketing — é uma técnica de pré-processamento de dados. Retorna VARCHAR.
Sintaxe
BINS(field_name, options)
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Nome da coluna de campo. A coluna não pode ser do tipo VARCHAR ou BOOLEAN. |
|
|
Não |
Política de binning e formato de saída no formato |
Exemplos
Exemplo 1: Agrupe todos os valores de temperature no intervalo de tempo especificado em bins.
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;
Resultado:
+-----------+----------+--------------------------------+--------------------+
| 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] |
+-----------+-----------+-------------------------------+--------------------+
Exemplo 2: Agrupe valores de temperature do dispositivo F07A1260 em bins.
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;
Resultado:
+-----------+----------+--------------------------------+--------------------+
| 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) |
+-----------+----------+--------------------------------+--------------------+
Exemplo 3: Agrupe valores de temperature do dispositivo F07A1260 em 2 bins uniformes e gere rótulos ordinais.
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;
Resultado:
+-----------+----------+--------------------------------+--------------------+
| 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 |
+-----------+----------+--------------------------------+--------------------+