As tabelas Delta no MaxCompute suportam importação de dados em tempo quase real, com granularidade de minutos. Sob alto volume de escrita, esse processo gera muitos arquivos incrementais pequenos e acumula estados intermediários redundantes provenientes de operações UPDATE e DELETE. Para resolver isso automaticamente, o MaxCompute executa três serviços em segundo plano: Clustering, Compaction e recuperação de dados.
Como funciona
Cada serviço atua em uma camada diferente do problema de organização de dados:
|
Serviço |
Problema resolvido |
Acionamento |
|
Clustering |
Acúmulo de DeltaFiles pequenos que aumentam os custos de armazenamento, a carga de I/O e a frequência de atualização de metadados |
Automático, com base no status do sistema |
|
Compaction |
Registros intermediários redundantes de operações UPDATE e DELETE que incham o armazenamento e tornam mais lentas as consultas de snapshot completo |
Frequência determinada pelas necessidades do negócio e pelas características dos dados |
|
Recuperação de dados |
Versões históricas de dados que se acumulam além de sua vida útil |
Automático por política de retenção; manual via |
Os três serviços interagem com o Meta Service, que garante a segurança transacional em todas as operações: detecta conflitos, coordena atualizações de metadados e recupera arquivos antigos.
Clustering
O Storage Service interno do MaxCompute executa o Clustering. Esse serviço mescla DeltaFiles pequenos sem modificar estados intermediários históricos — nenhum histórico intermediário de registro é eliminado.
Funcionamento do Clustering

O Clustering utiliza uma estratégia de mesclagem hierárquica baseada em padrões típicos de leitura e escrita. Os arquivos são avaliados periodicamente em múltiplas dimensões — tamanho e quantidade — e mesclados entre níveis:
Do Nível 0 ao Nível 1: Os menores DeltaFiles das escritas iniciais (azuis na figura) são mesclados em DeltaFiles de tamanho médio (amarelos).
Do Nível 1 ao Nível 2: Quando os DeltaFiles de tamanho médio atingem escala suficiente, uma mesclagem de nível superior é acionada para produzir arquivos maiores e otimizados (laranjas).
Após a mesclagem, os custos de armazenamento diminuem, a carga de I/O cai e a frequência de atualização de metadados reduz. Isso resolve diretamente os problemas de acúmulo de arquivos pequenos que surgem sob escritas incrementais de alto volume.
Controles de amplificação de leitura e escrita
Cada operação de Clustering lê e grava dados pelo menos uma vez, o que consome recursos de computação e I/O. Três mecanismos limitam a amplificação desnecessária:
Isolamento de arquivos grandes: Arquivos que excedem um limiar de tamanho (como o arquivo T8 no Bucket3 da figura) são excluídos da mesclagem.
Limite de intervalo de tempo: Arquivos com grande intervalo temporal não são mesclados. Isso evita que o Time Travel e consultas incrementais leiam grandes volumes de dados históricos fora do intervalo da consulta.
Acionamento automático: O mecanismo do MaxCompute avalia o status do sistema e aciona o Clustering automaticamente. Nenhuma intervenção manual é necessária.
Concorrência e segurança transacional
Como os dados são particionados e armazenados por BucketIndex, o Clustering é executado simultaneamente no nível de bucket, o que reduz significativamente o tempo total de execução.
Após cada execução, o Clustering transmite informações sobre arquivos de dados novos e antigos ao Meta Service. O Meta Service detecta conflitos de transação, coordena a atualização contínua de metadados para arquivos novos e antigos e recupera os arquivos de dados obsoletos.
Compaction
Tabelas Delta suportam operações UPDATE e DELETE, mas estas não modificam registros no local. Em vez disso, cada operação grava um novo registro que marca o estado anterior do registro antigo. Com o tempo, isso produz:
Redundância de dados: Registros intermediários se acumulam, aumentando os custos de armazenamento e computação.
Menor eficiência de consulta: Consultas de snapshot completo precisam processar mais registros para determinar o estado atual.
A Compaction mescla BaseFiles e DeltaFiles selecionados, combina todos os registros com a mesma chave primária e retém apenas o estado mais recente. O resultado é um novo BaseFile contendo apenas dados INSERT — todos os estados intermediários de UPDATE e DELETE são eliminados.
Funcionamento da Compaction

A Compaction é executada simultaneamente no nível de bucket e segue uma linha do tempo de operações acionadas:
De t1 a t3, um novo lote de DeltaFiles é gravado. Isso aciona uma Compaction que mescla esses DeltaFiles em um novo BaseFile para cada bucket.
Em t4 e t6, outro lote de DeltaFiles é gravado. A próxima Compaction mescla o BaseFile existente com os novos DeltaFiles para produzir um BaseFile atualizado.
Assim como no Clustering, a Compaction interage com o Meta Service após cada execução: o Meta Service detecta conflitos de transação, atualiza atomicamente os metadados para arquivos novos e antigos e recupera os arquivos de dados obsoletos.
Escolha da frequência de Compaction
A Compaction reduz custos de armazenamento e computação ao eliminar estados intermediários de registros, o que acelera diretamente as consultas de snapshot completo. No entanto, executá-la frequentemente tem custos:
Cada execução requer recursos significativos de computação e I/O.
O novo BaseFile exige armazenamento adicional.
DeltaFiles históricos necessários para o Time Travel não podem ser excluídos imediatamente, portanto continuam a gerar custos de armazenamento até que o período de retenção expire.
Defina a frequência da Compaction com base na intensidade de operações UPDATE e DELETE da sua carga de trabalho:
|
Padrão de carga de trabalho |
Abordagem recomendada |
|
Operações frequentes de UPDATE/DELETE com alta demanda por velocidade em consultas de snapshot completo |
Aumente a frequência da Compaction |
|
Baixa taxa de UPDATE/DELETE ou consultas de snapshot completo pouco frequentes |
Execute a Compaction com menor frequência para reduzir o consumo de recursos |
Recuperação de dados
Tabelas Delta retêm versões históricas de dados para dar suporte ao Time Travel e a consultas incrementais. A recuperação de dados remove versões que não são mais necessárias.
Recomendado: configure uma política de retenção
Defina o período de retenção de dados usando a propriedade de tabela acid.data.retain.hours. Dados históricos anteriores a esse valor são recuperados automaticamente. Após a recuperação, essa versão não pode mais ser consultada via Time Travel. Os dados recuperados consistem principalmente em logs de operação e arquivos de dados.
Se uma tabela Delta recebe continuamente novos DeltaFiles, nenhum DeltaFile pode ser excluído — outros DeltaFiles podem ter dependências de estado sobre eles. Após uma operação de COMPACTION ou InsertOverwrite, os arquivos gerados subsequentemente não dependem mais dos DeltaFiles anteriores e podem ser recuperados após a expiração do período de consulta do Time Travel.
Opcional: force a limpeza antecipada
Em cenários especiais, use o comando PURGE para acionar manualmente uma limpeza forçada de dados históricos.
Salvaguarda automática
Se a Compaction não for executada por um longo período, os dados históricos podem crescer indefinidamente, o que eventualmente bloqueia a recuperação. Para evitar isso, o mecanismo do MaxCompute executa periodicamente uma Compaction automática em BaseFiles ou DeltaFiles mais antigos que o período de retenção configurado para o Time Travel. Isso garante que o mecanismo de recuperação continue funcionando corretamente.