Reorganizar tabelas Delta com REORG

Use o REORG comando quando precisar de reescrever parte de uma tabela Delta para um objetivo específico de manutenção. Em Fabric, REORG reorganiza o layout físico de uma tabela reescrevendo ficheiros de dados ou atualizando metadados da tabela, dependendo da opção escolhida.

REORG é diferente da compactação rotineira de ficheiros. Tem como alvo cenários como a remoção física de linhas que os vetores de eliminação marcaram como eliminadas.

O que o REORG faz

REORG TABLE reescreve o estado da tabela para uma operação de manutenção definida.

  • APPLY (PURGE) reescreve ficheiros de dados afetados para que as linhas que foram eliminadas suavemente através de vetores de eliminação sejam fisicamente removidas dos ficheiros Parquet subjacentes.

Usa REORG quando precisares de um resultado específico de reescrita, não apenas de ficheiros pequenos ou menores.

Utilize o PURGE para remover fisicamente linhas eliminadas de forma recuperável

Os vetores de eliminação permitem que o Delta Lake marque as linhas como eliminadas sem reescrever imediatamente os ficheiros originais do Parquet. Este comportamento mantém as operações de eliminação eficientes, mas os dados da linha eliminada continuam a existir nos ficheiros físicos até serem reescritos.

Quando executa REORG TABLE ... APPLY (PURGE), Fabric reescreve os ficheiros afetados e remove as linhas apagadas suavemente dos ficheiros Parquet ativos. Depois de PURGE terminar, essas linhas apagadas desaparecem dos ficheiros reescritos.

Note

PURGE normalmente não é exigido como uma etapa de manutenção separada. OPTIMIZE purga automaticamente ficheiros quando mais de 5% de registos são referenciados por vetores de eliminação durante a compactação. Reserve PURGE para cenários em que precises de controlo explícito sobre quando as linhas de soft delete são fisicamente removidas.

Esta opção é útil quando:

  • Tens requisitos de conformidade ou RGPD e precisas que os dados eliminados sejam fisicamente removidos num calendário específico.
  • Pretendes forçar a eliminação de ficheiros que se situam abaixo do limiar de 5% utilizado por OPTIMIZE.

Reveja a sintaxe

Use os seguintes exemplos num caderno Fabric.

Purgar linhas apagadas suavemente de uma tabela

REORG TABLE table_name APPLY (PURGE)

Purgar linhas apagadas suavemente apenas para correspondência de dados

REORG TABLE table_name WHERE predicate APPLY (PURGE)

Usa uma WHERE cláusula quando quiseres direcionar partições específicas ou uma fatia menor de dados.

REORG TABLE sales.orders
WHERE order_date = DATE '2026-05-01'
APPLY (PURGE)

Escolha REORG ou OPTIMIZE

REORG e OPTIMIZE resolvem problemas diferentes.

  • OPTIMIZE efetua a compactação de contentores. Consolida ficheiros pequenos em ficheiros maiores para melhorar a eficiência da varredura.
  • REORG ... APPLY (PURGE) remove fisicamente as linhas que os vetores de eliminação marcaram como eliminadas.

Podes usar ambos os comandos em conjunto. Por exemplo, pode correr REORG ... APPLY (PURGE) para remover fisicamente os dados apagados e depois correr OPTIMIZE para melhorar o layout dos ficheiros.

Compreender vetores de eliminação

Vetores de eliminação são estruturas de metadados que marcam as linhas como eliminadas sem reescrever imediatamente os ficheiros Parquet que contêm essas linhas. Os leitores respeitam os vetores de eliminação, por isso as linhas eliminadas não aparecem nos resultados das consultas, mas os bytes permanecem armazenados até ocorrer uma reescrita.

REORG ... APPLY (PURGE) é o passo que remove fisicamente essas linhas dos ficheiros de Parquet reescritos.

Executa o REORG no Fabric

Executar REORG a partir das experiências baseadas em Spark no Fabric, tais como:

  • Blocos de notas do Fabric
  • Definições de tarefas do Spark

Não execute REORG a partir do endpoint de análise do SQL. REORG é um comando de manutenção SQL do Spark para tabelas Delta.

Siga as melhores práticas

  • Corra PURGE apenas quando tiver uma necessidade específica, como requisitos de conformidade. OPTIMIZE Purga automaticamente ficheiros quando mais de 5% de registos são referenciados por vetores de eliminação, pelo que a manutenção rotineira normalmente não requer uma etapa separada PURGE .
  • Execute PURGE antes de VACUUM quando necessita que os dados eliminados sejam fisicamente removidos para fins de conformidade ou para cumprir os requisitos do RGPD.
  • Usa WHERE predicados para direcionar partições específicas quando não precisas de reescrever a tabela inteira.
  • Utilize UPGRADE UNIFORM quando precisar de leitores Iceberg, mas tenha em conta os metadados adicionais que o UniForm mantém.
  • Trate REORG e OPTIMIZE como operações de manutenção complementares, não como intercambiáveis.