Todos os produtos
Search
Central de documentação

MaxCompute:Otimização da organização de dados para tabelas Delta com PK

Última atualização: Jun 26, 2026

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 PURGE

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

image.png

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

image.png

A Compaction é executada simultaneamente no nível de bucket e segue uma linha do tempo de operações acionadas:

  1. 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.

  2. 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.

Nota

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.