Todos os produtos
Search
Central de documentação

Lindorm:SELECT

Última atualização: Jun 28, 2026

Consulta dados de uma tabela.

Mecanismos aplicáveis

A sintaxe SELECT aplica-se ao LindormTable e ao LindormTSDB.

Limitações

O SELECT suporta apenas consultas planas (tabela única). Não há suporte para consultas com junção de várias tabelas (JOIN) nem para consultas de conjunto (UNION, INTERSECT).

Sintaxe

SELECT [hint_clause] ( select_clause | '*' )
    FROM table_name
    [ WHERE where_clause ]
    [ GROUP BY group_by_clause ]
    [ ORDER BY ordering_clause ]
    [ LIMIT integer [OFFSET integer] ] | [LIMIT integer, integer]
select_clause    ::=  selector [ AS identifier ] ( ',' selector [ AS identifier ] )
selector         ::=  column_name
                      | term
                      | function_name '(' [ selector ( ',' selector )* ] ')'
where_clause     ::=  relation ( AND|OR relation )*
relation         ::=  column_name operator term
                      |'(' column_name ( ',' column_name )* ')' operator tuple_literal
operator         ::=  '=' | '<' | '>' | '<=' | '>=' | '!=' | IN | IS NOT? NULL | LIKE
group_by_clause  ::=  column_name ( ',' column_name )*
ordering_clause  ::=  column_name [ ASC | DESC ] ( ',' column_name [ ASC | DESC ] )*

hint_clause::=/*+hint_items*/
hint_items::=hint_item(','hint_item)*
hint_item::=identifier('('hint_option(','hint_option)*')')
hint_option::=expression

Diferenças

A sintaxe SELECT do LindormTable e do LindormTSDB é praticamente idêntica. Contudo, alguns elementos diferem devido aos modelos de dados distintos. A tabela a seguir compara essas diferenças.

Elemento de sintaxe

LindormTable

LindormTSDB

Cláusula WHERE

0

Cláusula SAMPLE BY

✖️

Cláusula GROUP BY

Cláusula ORDER BY

0

Cláusula LIMIT

0

0

HINT

Notas de uso

Cláusula SELECT

A cláusula SELECT especifica as colunas, constantes e expressões de função a retornar. Use AS para definir um alias temporário para uma coluna no conjunto de resultados.

Cláusula WHERE

A cláusula WHERE define as condições da consulta.

Consultas em tabelas wide

Importante

Para evitar consultas ineficientes em tabelas wide, siga estas regras:

  • Use apenas a primeira coluna da chave primária ou a primeira coluna de índice da tabela de índices como condição de consulta; OU

  • Se precisar filtrar por qualquer outra coluna, defina limites superior e inferior para a primeira coluna da chave primária ou para a primeira coluna de índice. O sistema sinaliza e bloqueia por padrão consultas que violem ambas as regras. Para forçar a execução, adicione /*+ _l_allow_filtering_ */. Consulte Forçar uma consulta ineficiente.

O exemplo a seguir ilustra a diferença entre uma consulta eficiente e uma ineficiente na tabela sensor, que tem device_id como primeira coluna da chave primária:

-- Allowed: first primary key column (device_id) is used as a condition
SELECT * FROM sensor WHERE device_id = 'F07A1260' AND humidity = 20;

-- Not allowed: no bound on device_id; filtering on a non-primary-key column only
-- This query is flagged as inefficient and blocked unless _l_allow_filtering_ is added.
SELECT * FROM sensor WHERE humidity = 20;

Colunas dinâmicas

Se as colunas dinâmicas estiverem habilitadas na tabela wide:

  • Inclua colunas de chave primária ou de índice na cláusula WHERE para garantir o desempenho da consulta.

  • As condições sobre colunas dinâmicas na cláusula WHERE devem ser HexStrings.

Para mais informações, consulte Colunas dinâmicas.

Cláusula ORDER BY

Especifica uma ou mais colunas para ordenar o conjunto de resultados.

Importante
  • Toda coluna na cláusula ORDER BY deve constar também na cláusula SELECT. Caso contrário, ocorre um erro de verificação semântica.

  • A cláusula ORDER BY não aceita aliases.

Cláusula LIMIT

A cláusula LIMIT controla a quantidade de linhas retornadas e permite consultas paginadas.

Sintaxe

Comportamento

LIMIT n

Retorna n linhas

LIMIT n, m

Ignora n linhas e retorna as m linhas seguintes

LIMIT m OFFSET n

Equivalente a LIMIT n, m

Importante
  • Mantenha o OFFSET em no máximo 5.000. Mesmo com OFFSET, a consulta recupera internamente as linhas ignoradas; logo, valores altos aumentam a sobrecarga.

  • Com colunas dinâmicas habilitadas, SELECT * exige uma cláusula LIMIT para garantir metadados corretos no conjunto de resultados. O limite máximo padrão é 5.000; exceder esse valor gera erro.

HINT

LindormTable e LindormTSDB aceitam hints para influenciar planos de consulta ou ativar comportamentos específicos. Para detalhes, consulte Visão geral de HINT.

Exemplos

Os exemplos deste tópico usam a seguinte tabela:

CREATE TABLE sensor (
    device_id   VARCHAR NOT NULL,
    region      VARCHAR NOT NULL,
    time        BIGINT  NOT NULL,
    temperature DOUBLE,
    humidity    BIGINT,
    PRIMARY KEY(device_id, region, time)
);

Consultas simples

-- Select all columns
SELECT * FROM sensor;

-- Select specific columns
SELECT device_id, region, humidity FROM sensor;

-- Limit results with an offset (LIMIT 5, 20 is equivalent)
SELECT * FROM sensor WHERE device_id = 'F07A1260' LIMIT 20 OFFSET 5;

-- Define a column alias
SELECT count(*) AS countRow FROM sensor;

Exemplos de funções espaço-temporais:

-- Return the WKT representation of a geometry column
SELECT id, ST_AsText(g) FROM gps_data;

-- Return a buffered geometry
SELECT id, ST_Buffer(g, 1.0) AS buffer FROM gps_data;

Consultas de agregação

Conte todos os registros do dispositivo F07A1260 em um horário específico:

SELECT count(*) FROM sensor
WHERE device_id = 'F07A1260' AND time = '2021-04-22 15:33:00';

Obtenha a temperatura máxima do dispositivo F07A1260 em um intervalo de tempo:

SELECT max(temperature) AS max_temp FROM sensor
WHERE device_id = 'F07A1260'
  AND time >= '2021-04-22 15:33:00'
  AND time <  '2021-04-22 15:33:20';

Consultas condicionais

Consulte a umidade do dispositivo F07A1260 quando a região e a temperatura atenderem a condições compostas e a umidade não for nula:

SELECT device_id, humidity FROM sensor
WHERE ((region = 'north-cn' AND temperature > 15)
    OR (region = 'south-cn' AND temperature > 10))
  AND device_id = 'F07A1260'
  AND humidity IS NOT NULL;

Consulte dados de vários dispositivos usando IN:

SELECT * FROM sensor WHERE device_id IN ('F07A1260', 'F07A1261');

Consultas condicionais espaço-temporais — as três condições espaciais a seguir permitem execução eficiente:

-- ST_Contains: points inside a polygon
SELECT id FROM gps_data
WHERE ST_Contains(ST_GeomFromText('POLYGON((...))'), g);

-- ST_DWithin: points within a planar distance (unit: degrees)
SELECT id FROM gps_data
WHERE ST_DWithin(ST_GeomFromText('POINT(0 0)'), g, 100);

-- ST_DWithinSphere: points within a spherical distance (unit: meters)
SELECT id FROM gps_data
WHERE ST_DWithinSphere(ST_GeomFromText('POINT(0 0)'), g, 100);

Forçar uma consulta ineficiente

Ao detectar uma instrução SELECT ineficiente, o LindormTable bloqueia a consulta por padrão e gera uma exceção. Esse mecanismo protege o desempenho geral do sistema.

Uma consulta é considerada ineficiente quando todas as condições abaixo forem verdadeiras:

  • A cláusula WHERE não define limites superior e inferior para a primeira coluna da chave primária.

  • A cláusula WHERE não define limites superior e inferior para a primeira coluna de índice da tabela de índices.

  • A cláusula WHERE filtra por uma coluna que não seja a primeira coluna da chave primária nem a primeira coluna de índice.

Para ignorar a verificação e forçar a execução da consulta, adicione /*+ _l_allow_filtering_ */:

SELECT /*+ _l_allow_filtering_ */ * FROM sensor WHERE humidity = 20;

Para orientações sobre como resolver ou evitar consultas ineficientes, consulte Como resolver ou evitar consultas ineficientes.

Perguntas frequentes

Como resolvo o erro de consulta em tabela wideDoNotRetryIOException: Detect inefficient query:...?

Causa: A mensagem de erro DoNotRetryIOException: Detect inefficient query:... indica que o LindormTable identificou a instrução como uma consulta ineficiente.

O que é uma consulta ineficiente?

Uma consulta SELECT é considerada ineficiente se atender a todas as condições a seguir:

  • A cláusula WHERE não especifica limites superior e inferior para a primeira chave primária da tabela.

  • A cláusula WHERE não especifica limites superior e inferior para a primeira coluna de índice da tabela de índices.

  • A cláusula WHERE contém uma condição em uma coluna que não seja a primeira chave primária nem a primeira coluna de índice.

Para evitar riscos ao desempenho e à estabilidade do Lindorm, o LindormTable não executa essas consultas por padrão e gera uma exceção.

Exemplo de consulta ineficiente: SELECT * FROM dt WHERE p2=20;

Como evitar consultas ineficientes

  • Defina a coluna da condição de consulta como a primeira chave primária da tabela. Para mais informações, consulte Projetar chaves primárias para uma tabela wide.

  • Crie um índice secundário para a coluna da condição de consulta. Para mais informações, consulte Índice secundário.

  • Otimize as colunas na condição de consulta para que ela não seja classificada como ineficiente.

Como forçar uma consulta ineficiente

Para ignorar a verificação e forçar a execução da consulta, adicione /*+ _l_allow_filtering_ */ à instrução. Veja um exemplo:

SELECT /*+ _l_allow_filtering_ */ * FROM sensor WHERE humidity = 20;