Todos os produtos
Search
Central de documentação

Lindorm:Funções comuns de séries temporais

Última atualização: Jun 28, 2026

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

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 campos temperature e humidity.

  • Série temporal 2: device_id=F07A1261, region=south-cn, com os campos temperature e humidity.

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 20s agrupa 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
Importante
  • CURRENT_TIMESTAMP nã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_TIMESTAMP para 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

field_name

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

field_name

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

field_name

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

field_name

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

field_name

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

field_name

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

field_name

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

field_name

Nome da coluna de campo. A coluna não pode ser do tipo VARCHAR ou BOOLEAN.

P

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:

2023-03-20_10-29-38

onde interval é o intervalo de tempo especificado em segundos.

Importante

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

field_name

Nome da coluna de campo. A coluna não pode ser do tipo VARCHAR ou BOOLEAN.

interval units

Intervalo de tempo para cálculo da inclinação. Padrão: 1s. Unidades válidas: s (segundos), m (minutos), h (horas), d (dias).

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

Importante

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

field_name

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

field_name

Nome da coluna de campo.

N

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

field_name

Sim

Nome da coluna de campo. A coluna não pode ser do tipo VARCHAR ou BOOLEAN.

model_name

Sim

Nome do modelo treinado. Deve ser do tipo VARCHAR.

options

Não

Opções de previsão no formato key1=value1[, key2=value2]. Consulte as opções abaixo.

Opções

Opção

Tipo

Padrão

Descrição

batch_size

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.

step

INTEGER

Valor de PREDICTION_LENGTH definido durante o treinamento

Tamanho do passo no qual os resultados da previsão são gerados.

quantile_output

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; quantile_output seleciona um valor desse array. Configure este parâmetro com base no algoritmo usado: para DeepAR, use um valor entre 0 e 1; para TFT, use 0,1, 0,5 ou 0,9.

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

field_name

Sim

Nome da coluna de campo. A coluna não pode ser do tipo VARCHAR ou BOOLEAN.

algo_name

Condicional

Nome de um algoritmo integrado da DAMO Academy. Use este parâmetro quando o Lindorm AI não estiver ativado. Valores suportados: esd (detecção de picos para curvas de monitoramento), nsigma (análise estatística simples de anomalias), ttest (detecta anomalias causadas por deslocamentos de valor médio), istl-esd (detecção de anomalias para dados periódicos).

model_name

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.

options

Não

Opções de detecção no formato key1=value1[, key2=value2]. Para opções disponíveis, consulte Detecção de anomalias em séries temporais.

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

field_name

Sim

Nome da coluna de campo. A coluna não pode ser do tipo VARCHAR ou BOOLEAN.

options

Não

Política de binning e formato de saída no formato key1=value1, key2=value2.

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