Todos os produtos
Search
Central de documentação

MaxCompute:COMPACTION

Última atualização: Oct 10, 2026

A compactação mescla todos os arquivos de dados com base em uma política específica para melhorar a eficiência das consultas.

Recursos

As Delta Tables suportam gravações incrementais em tempo quase real e consultas com time travel. Gravações frequentes de dados geram muitos arquivos pequenos. Uma política de mesclagem eficiente combina esses arquivos pequenos e remove dados duplicados. Esse processo melhora a eficiência de E/S e reduz a carga no sistema de armazenamento. No entanto, compactações frequentes podem causar amplificação intensa de gravação e falhas por conflito.

Atualmente, o sistema oferece suporte a dois métodos de mesclagem de dados:

  • Clustering: mescla os DeltaFiles confirmados em um único arquivo grande, sem alterar os dados. O sistema executa esse processo periodicamente com base no tamanho e na quantidade de novos arquivos. Não é necessário executá-lo manualmente. O clustering resolve principalmente problemas de eficiência e estabilidade de E/S causados por arquivos pequenos.

  • Compactação: mescla todos os arquivos de dados com base em uma política específica para gerar novos BaseFiles. O sistema armazena apenas o estado mais recente para linhas de dados com a mesma chave primária (PK). O processo não inclui estados históricos nem informações de colunas do sistema. O principal objetivo da compactação é melhorar a eficiência das consultas.

Sintaxe

alter table <table_name> [partition 
                          (<partition_key> = '<partition_value>' [, ...])
                         ] 
                         compact major;

Notas

  • Para executar a compactação manualmente, defina a seguinte flag.

     set odps.merge.task.mode=service;
  • A compactação cria novos arquivos. Embora essa operação melhore a eficiência das consultas, ela também aumenta os custos de armazenamento. Escolha uma frequência de acionamento que equilibre esses fatores para o seu cenário específico.

  • A compactação consome recursos de computação para ler e reescrever dados. Se você utilizar o método de faturamento de pagamento conforme o uso, haverá cobrança pela compactação. O sistema calcula o custo da seguinte forma: Volume de dados escaneados × 1 × Preço unitário. Caso utilize o método de faturamento por assinatura, a compactação consumirá a cota de recursos de computação da sua assinatura.

Exemplos

--Create a table
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            
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. After the operation completes, you can still query historical data.
set odps.merge.task.mode=service;
alter table mf_dt partition(dd='01', hh='01') compact major;
select * from mf_dt timestamp as of get_latest_timestamp('mf_dt') where dd='01' and hh='01';
select * from mf_dt timestamp as of get_latest_timestamp('mf_dt', 2) where dd='01' and hh='01';