Todos os produtos
Search
Central de documentação

MaxCompute:COMPACTION

Última atualização: Jun 26, 2026

Gravações frequentes em tabelas delta geram muitos arquivos pequenos, o que reduz o throughput de E/S e aumenta a pressão sobre o armazenamento. A compactação mescla todos os arquivos de dados em um conjunto consolidado de arquivos base, mantendo apenas a versão mais recente de cada linha. Assim, as consultas leem menos arquivos e executam com maior rapidez.

Visão geral

As tabelas delta oferecem suporte a dois métodos de mesclagem de dados:

Método

Funcionamento

Acionamento

Clustering

Mescla apenas arquivos delta em um arquivo maior, sem alterar o conteúdo dos dados. Os arquivos delta contêm dados de operações confirmadas.

Automático — o sistema executa o clustering periodicamente com base no tamanho e na quantidade de arquivos. Nenhuma ação manual é necessária.

Compaction

Mescla todos os arquivos de dados em um lote de arquivos base. Para linhas com a mesma chave primária, apenas a linha mais recente é mantida. Versões históricas das linhas e dados de colunas do sistema não são retidos.

Manual — execute ALTER TABLE ... COMPACT MAJOR.

Pré-requisitos

Antes de começar, verifique se você possui:

  • Uma tabela delta (criada com tblproperties ("transactional"="true"))

  • A propriedade de sessão odps.merge.task.mode=service definida na sua sessão

Sintaxe

ALTER TABLE <table_name>
  [PARTITION (<partition_key> = '<partition_value>' [, ...])]
  COMPACT MAJOR;

Parâmetros

Parâmetro

Obrigatório

Descrição

table_name

Sim

Nome da tabela delta a ser compactada.

partition_key

Não

Nome da chave de partição. Especifique para compactar uma única partição.

partition_value

Não

Valor da chave de partição.

Observações de uso

  • Propriedade de sessão obrigatória: Defina odps.merge.task.mode=service antes de executar a compactação.

    SET odps.merge.task.mode=service;
  • Custo de armazenamento: A compactação gera novos arquivos base antes de remover os antigos, o que aumenta temporariamente o uso do armazenamento. Configure uma frequência de acionamento adequada às necessidades do seu negócio.

  • Amplificação de gravação e conflitos: A política de compactação foi projetada para evitar amplificação grave de gravação e falhas causadas por conflitos em cenários de compactação frequente.

Faturamento

Método de faturamento

Cobrança da compactação

Pagamento conforme o uso

Quantidade de dados lidos × 1 × preço unitário

Assinatura

Deduzido da cota de computação da assinatura

Exemplo

O exemplo a seguir cria uma tabela delta particionada, insere dados em três lotes, executa a compactação e, em seguida, consulta dados históricos usando time travel.

-- Create a delta table with a primary key and two partition columns.
CREATE TABLE mf_dt (pk BIGINT NOT NULL PRIMARY KEY, val BIGINT NOT NULL)
  PARTITIONED BY (dd STRING, hh STRING)
  TBLPROPERTIES ("transactional"="true");

-- Insert data in three batches to simulate incremental writes.
INSERT INTO TABLE mf_dt PARTITION(dd='01', hh='01') VALUES (1, 1), (2, 2);
INSERT INTO TABLE mf_dt PARTITION(dd='01', hh='01') VALUES (2, 20), (3, 3);
INSERT INTO TABLE mf_dt PARTITION(dd='01', hh='01') VALUES (3, 30), (4, 4);

-- Run compaction on the partition.
SET odps.merge.task.mode=service;
ALTER TABLE mf_dt PARTITION(dd='01', hh='01') COMPACT MAJOR;

-- Query the latest snapshot after compaction.
SELECT * FROM mf_dt TIMESTAMP AS OF get_latest_timestamp('mf_dt')
  WHERE dd='01' AND hh='01';

-- Query the second-to-latest snapshot (time travel still works after compaction).
SELECT * FROM mf_dt TIMESTAMP AS OF get_latest_timestamp('mf_dt', 2)
  WHERE dd='01' AND hh='01';