Todos os produtos
Search
Central de documentação

Lindorm:Separar dados quentes e frios com base em uma coluna de tempo personalizada

Última atualização: Jun 28, 2026

Se sua tabela utiliza um timestamp de negócio (como hora do evento ou hora da transação) para classificar a idade dos dados — em vez do horário de gravação do sistema — configure o LindormTable para separar dados quentes e frios com base nessa coluna. O LindormTable arquiva linhas inteiras no armazenamento frio quando o valor na coluna de tempo personalizada ultrapassa o limite configurado. As linhas recentes permanecem no armazenamento rápido para consultas de baixa latência, enquanto as mais antigas migram para o armazenamento frio, reduzindo custos. Como os dados quentes e frios residem na mesma tabela, as consultas são roteadas transparentemente para a camada de armazenamento correta ao filtrar pela coluna de tempo personalizada.

Pré-requisitos

Antes de começar, verifique se você atende aos seguintes requisitos:

Restrições

  • Este recurso é suportado apenas para Lindorm SQL. Operações compatíveis com HBase não são suportadas.

  • Quando o valor de uma linha na coluna de tempo personalizada cruza o limite de dados quentes, a linha inteira é arquivada no armazenamento frio.

  • A coluna de tempo personalizada deve atender a todas as condições abaixo:

    • Deve ser uma coluna de chave primária.

    • Não pode ser a primeira coluna da chave primária.

    • O tipo de dados deve ser BIGINT ou TIMESTAMP. Se a coluna não existir, não tiver dados ou contiver dados de tipo incorreto, todos os dados serão gravados no armazenamento quente.

Configurar a separação de dados quentes e frios para uma tabela

Etapa 1: Definir a coluna de tempo personalizada e o limite de dados

Escolha um dos métodos a seguir, dependendo se a tabela já existe.

Método 1: Definir durante a criação da tabela

Os exemplos abaixo criam uma tabela chamada dt com um limite de separação de dados quentes e frios de um dia, usando a coluna p2 como coluna de tempo personalizada.

Nota

A coluna de tempo personalizada (p2 nestes exemplos) deve ser uma coluna de chave primária, mas não pode ser a primeira coluna da chave primária.

-- Default time unit: milliseconds (ms)
CREATE TABLE dt (p1 integer, p2 bigint, p3 bigint, c1 varchar, constraint pk PRIMARY KEY(p1, p2, p3))
WITH(COMPRESSION = 'ZSTD', CHS ='86400', CHS_L2 = 'storagetype=COLD', CHS_COLUMN = 'COLUMN=p2');

-- Set time unit to seconds (s)
CREATE TABLE dt (p1 integer, p2 bigint, p3 bigint, c1 varchar, constraint pk PRIMARY KEY(p1, p2, p3))
WITH(COMPRESSION = 'ZSTD', CHS ='86400', CHS_L2 = 'storagetype=COLD', CHS_COLUMN = 'COLUMN=p2|TIMEUNIT=SECONDS');

-- Set time unit to minutes (min)
CREATE TABLE dt (p1 integer, p2 bigint, p3 bigint, c1 varchar, constraint pk PRIMARY KEY(p1, p2, p3))
WITH(COMPRESSION = 'ZSTD', CHS ='86400', CHS_L2 = 'storagetype=COLD', CHS_COLUMN = 'COLUMN=p2|TIMEUNIT=MINUTES');
Importante

Não adicione espaços antes ou depois do sinal de igual (=) em CHS_COLUMN. Por exemplo, use COLUMN=p2, e não COLUMN = p2. Espaços causam erro.

Parâmetro

Descrição

CHS

Limite entre dados quentes e frios, em segundos. Dados anteriores a esse limiar (com base na coluna de tempo personalizada) são arquivados no armazenamento frio durante a compactação. Por exemplo, 86400 = 86.400 segundos = 1 dia.

CHS_L2

Propriedade de armazenamento de camada 2. Defina como storagetype=COLD para direcionar os dados arquivados ao armazenamento frio.

CHS_COLUMN

Coluna de tempo personalizada e sua unidade de tempo. Formato: `COLUMN=

TIMEUNIT=`. A unidade padrão é milissegundos (ms). Unidades suportadas: SECONDS, MINUTES, MICROSECONDS, NANOSECONDS.

COMPRESSION

Algoritmo de compressão da tabela. Não diferencia maiúsculas de minúsculas. O padrão é none.

Método 2: Adicionar separação a uma tabela existente

Utilize ALTER TABLE para ativar a separação de dados quentes e frios em uma tabela criada sem essa configuração.

-- Enable hot and cold data separation with a one-day boundary, using p2 (default unit: milliseconds)
ALTER TABLE dt SET 'CHS' ='86400', 'CHS_L2' = 'storagetype=COLD', 'CHS_COLUMN' = 'COLUMN=p2';

-- Use p2 with time unit set to seconds
ALTER TABLE dt SET 'CHS' ='86400', 'CHS_L2' = 'storagetype=COLD', 'CHS_COLUMN' = 'COLUMN=p2|TIMEUNIT=SECONDS';

-- Use p2 with time unit set to minutes
ALTER TABLE dt SET 'CHS' ='86400', 'CHS_L2' = 'storagetype=COLD', 'CHS_COLUMN' = 'COLUMN=p2|TIMEUNIT=MINUTES';

Verificar a configuração

Use um dos métodos a seguir para confirmar as definições:

  • Execute SHOW TABLE VARIABLES FROM dt LIKE 'CHS_COLUMN'; para visualizar as propriedades da tabela.

  • No sistema de gerenciamento de cluster, acesse a página Overview e clique em nome da tabela. Na área Current Table Details, verifique os valores de CHS e CHS_COLUMN.

Etapa 2 (Opcional): Modificar a configuração

Modificar o limite de dados quentes e frios:

ALTER TABLE dt SET 'CHS'='1000';

Modificar a coluna de tempo personalizada:

ALTER TABLE dt SET 'CHS_COLUMN'='COLUMN=p3';

Etapa 3 (Opcional): Desativar a separação de dados quentes e frios

ALTER TABLE dt SET 'CHS'='', 'CHS_L2' = '', 'CHS_COLUMN'='';
Nota

Após modificar o limite ou desativar a separação, os dados não retornam imediatamente do armazenamento frio para o quente. O sistema aguarda a conclusão de uma compactação em segundo plano. Para devolver os dados ao armazenamento quente imediatamente, execute uma compactação principal manualmente usando o comando major_compact.

Configurar a separação de dados quentes e frios para um índice secundário

Um índice secundário é armazenado dentro da tabela base, portanto a configuração segue o mesmo processo. Os exemplos abaixo utilizam a tabela dt criada na seção anterior.

Nota

Para um índice secundário, CHS_COLUMN deve referenciar a mesma coluna de tempo personalizada da tabela base. Não é possível especificar uma coluna diferente.

Criar um índice secundário com separação ativada

Método 1: Definir durante a criação do índice secundário

CREATE INDEX idx ON dt (c1) WITH(CHS = '86400', CHS_L2 = 'storagetype=COLD', CHS_COLUMN='COLUMN=p2');

Método 2: Adicionar separação a um índice secundário existente

-- Enable hot and cold data separation on an existing index
ALTER TABLE `dt.idx` SET 'CHS' = '86400', 'CHS_L2' = 'storagetype=COLD', 'CHS_COLUMN'='COLUMN=p2';
Nota

O nome de uma tabela de índice secundário usa o formato TableName.IndexName. Como o ponto (.) é um caractere especial, coloque o nome entre crases (). Por exemplo, escreva dt.idx, e não dt.idx.

Modificar ou desativar a configuração do índice secundário

Modificar o limite de dados quentes e frios:

ALTER TABLE `dt.idx` SET 'CHS'='10000';

Modificar a coluna de tempo personalizada:

ALTER TABLE `dt.idx` SET 'CHS_COLUMN'='COLUMN=p2';

Desativar a separação:

ALTER TABLE `dt.idx` SET 'CHS'='', 'CHS_L2' = '', 'CHS_COLUMN'='';

Gravar dados

A gravação de dados em uma tabela com separação de dados quentes e frios ativada funciona da mesma forma que em uma tabela padrão. Inicialmente, os dados ficam no armazenamento quente (Medium ou Compute-optimized). Uma linha é arquivada no armazenamento frio durante a compactação quando a seguinte condição é atendida:

Current time - Value of the time column > Value of CHS

Consultar dados

Dados quentes e frios residem na mesma tabela. Todas as consultas têm como alvo essa única tabela. Ao filtrar pela coluna de tempo personalizada com um intervalo de tempo, o LindormTable determina se deve varrer o armazenamento quente, o frio ou ambos — assim, a consulta lê apenas a camada relevante. Sem um filtro de intervalo de tempo, a consulta pode acessar dados frios, e o throughput fica limitado pela capacidade do armazenamento frio. Para mais detalhes, consulte Instâncias Lindorm otimizadas para armazenamento.

Para consultar apenas dados quentes quando não for possível filtrar pela coluna de tempo personalizada, utilize a dica _l_hot_only_.

Exemplos de consulta

Consulta aleatória (Get)

-- p2 is the custom time column
SELECT * FROM dt WHERE p1 = 10 AND p2 = 10;

Consulta por intervalo

-- p2 is the custom time column
SELECT * FROM dt WHERE p2 > 10 AND p2 < 1000;
Importante

Por padrão, o LindormTable não executa uma instrução SELECT identificada como consulta ineficiente — ele lança uma exceção. Para mais detalhes, consulte SELECT.

Consultar apenas dados quentes usando uma dica

SELECT /*+ _l_hot_only_(true) */ * FROM dt WHERE p1 > 1;

Exemplo: Cenário de Internet dos Veículos

Em cenários de Internet dos Veículos (IoV), a chave primária geralmente consiste em vin (Número de Identificação do Veículo) e ts (timestamp). Defina ts como a coluna de tempo personalizada. Ao consultar dados de um veículo específico dentro de um intervalo de tempo, o LindormTable determina automaticamente se deve acessar o armazenamento quente ou frio com base nas condições da consulta.

USE test;
CREATE TABLE dt (
  vin varchar, ts bigint, c1 varchar, c2 varchar,
  constraint pk primary key(vin, ts)
) WITH (COMPRESSION = 'ZSTD', CHS ='86400', CHS_L2 = 'storagetype=COLD', CHS_COLUMN = 'COLUMN=ts');

-- Query data for a specific vehicle within a time range
SELECT * FROM dt WHERE vin = 'xxxx' AND ts > 1675065122000 AND ts < 1675975222000;

Perguntas frequentes

Se eu atualizar dados frios existentes, os dados atualizados permanecem frios?

Sim, desde que a atualização não altere o valor na coluna de tempo personalizada. Caso o valor mude, o LindormTable reavalia o status quente/frio da linha com base no novo valor.

Por exemplo: uma tabela possui as colunas de chave primária p1 e p2, e as colunas fora da chave primária c1 e c2. Uma linha tem os valores p1=row1, p2=Jan-28-2023, c1="c1", c2="c2". Com um limite de 1 dia (CHS) e data atual de Jan-30-2023, a linha é considerada fria. Atualizar c1 ou c2 mantém a linha fria. Já atualizar p2 para Jan-30-2023 torna a linha quente, e ela volta a ser fria em Feb-01-2023.

Nota

Não é possível atualizar o valor de uma coluna de tempo personalizada que faz parte da chave primária.

Se uma linha não tiver valor na coluna de tempo personalizada, os dados são separados?

Não. Linhas sem valor na coluna de tempo personalizada permanecem no armazenamento quente.