Remover ficheiros de dados não utilizados com o VACUUM
A otimização preditiva é executada VACUUM
automaticamente em tabelas gerenciadas pelo Unity Catalog. O Databricks recomenda habilitar otimizações preditivas para todas as tabelas gerenciadas do Unity Catalog para simplificar a manutenção de dados e reduzir os custos de armazenamento. Consulte Otimização preditiva para tabelas gerenciadas do Unity Catalog.
Você pode remover arquivos de dados não mais referenciados por uma tabela Delta que são mais antigos do que o limite de retenção executando o VACUUM
comando na tabela. Executar VACUUM
regularmente é importante para o custo e a conformidade devido às seguintes considerações:
- A exclusão de arquivos de dados não utilizados reduz os custos de armazenamento em nuvem.
- Os arquivos de dados removidos por
VACUUM
podem conter registros que foram modificados ou excluídos. A remoção permanente desses arquivos do armazenamento em nuvem garante que esses registros não estejam mais acessíveis.
Advertências para vácuo
O limite de retenção padrão para arquivos de dados após a execução VACUUM
é de 7 dias. Para alterar esse comportamento, consulte Configurar a retenção de dados para consultas de viagem no tempo.
VACUUM
pode deixar para trás diretórios vazios depois de remover todos os arquivos de dentro deles. As operações subsequentes VACUUM
excluem esses diretórios vazios.
O Databricks recomenda o uso da otimização preditiva para executar VACUUM
automaticamente tabelas Delta. Consulte Otimização preditiva para tabelas gerenciadas do Unity Catalog.
Alguns recursos do Delta Lake usam arquivos de metadados para marcar dados como excluídos em vez de reescrever arquivos de dados. Você pode usar REORG TABLE ... APPLY (PURGE)
para confirmar essas exclusões e reescrever arquivos de dados. Consulte Limpar exclusões somente de metadados para forçar a regravação de dados.
Importante
- No Databricks Runtime 13.3 LTS e superior,
VACUUM
a semântica para clones superficiais com tabelas gerenciadas do Unity Catalog difere de outras tabelas Delta. Consulte clones superficiais do Vacuum e do Unity Catalog. -
VACUUM
remove todos os arquivos de diretórios não gerenciados pelo Delta Lake, ignorando diretórios começando com_
ou.
. Se você estiver armazenando metadados adicionais, como pontos de verificação de Streaming Estruturado, em um diretório de tabela Delta, use um nome de diretório como_checkpoints
.- Os dados para o feed de dados de alteração são gerenciados pelo Delta Lake no
_change_data
diretório e removidos comVACUUM
. Consulte Usar feed de dados de alteração do Delta Lake no Azure Databricks. - Os índices de filtro Bloom usam o
_delta_index
diretório gerenciado pelo Delta Lake.VACUUM
limpa arquivos neste diretório. Consulte Índices de filtro Bloom.
- Os dados para o feed de dados de alteração são gerenciados pelo Delta Lake no
- A capacidade de consultar versões de tabela anteriores ao período de retenção é perdida após a execução
VACUUM
do . - Os arquivos de log são excluídos automaticamente e de forma assíncrona após as operações do ponto de verificação e não são controlados pelo
VACUUM
. Embora o período de retenção padrão dos arquivos de log seja de 30 dias, a execuçãoVACUUM
em uma tabela remove os arquivos de dados necessários para a viagem no tempo.
Nota
Quando o cache de disco está habilitado, um cluster pode conter dados de arquivos do Parquet que foram excluídos com VACUUM
o . Portanto, pode ser possível consultar os dados de versões anteriores da tabela cujos arquivos foram excluídos. A reinicialização do cluster removerá os dados armazenados em cache. Consulte Configurar o cache de disco.
Exemplo de sintaxe para vácuo
VACUUM table_name -- vacuum files not required by versions older than the default retention period
VACUUM table_name RETAIN 100 HOURS -- vacuum files not required by versions more than 100 hours old
VACUUM table_name DRY RUN -- do dry run to get the list of files to be deleted
Para obter detalhes da sintaxe do Spark SQL, consulte VACUUM.
Consulte a documentação da API Delta Lake para obter detalhes de sintaxe Scala, Java e Python.
Nota
Use a RETAIN
palavra-chave para especificar o limite usado para determinar se um arquivo de dados deve ser removido. O VACUUM
comando usa esse limite para olhar para trás no tempo a quantidade de tempo especificada e identificar a versão mais recente da tabela naquele momento. O Delta retém todos os arquivos de dados necessários para consultar essa versão da tabela e todas as versões mais recentes da tabela. Essa configuração interage com outras propriedades da tabela. Consulte Configurar retenção de dados para consultas de viagem no tempo.
modo completo vs. modo leve
Importante
Esse recurso está no Public Preview no Databricks Runtime 16.1 e superior.
Você pode especificar a palavra-chave LITE
em sua instrução vacuum para acionar um modo alternativo de VACUUM
que evite listar todos os arquivos no diretório da tabela.
LITE
modo usa o log de transações Delta para identificar arquivos de dados que não estão mais dentro do limite de retenção de VACUUM
e remove esses arquivos de dados da tabela.
LITE
modo é especialmente útil para tabelas grandes que exigem operações de VACUUM
frequentes, pois evita a necessidade de listar todos os arquivos para identificar os arquivos de dados a serem removidos.
Nota
A execução VACUUM
no modo LITE
não excluirá nenhum arquivo que não esteja referenciado no log de transações. Por exemplo, arquivos que foram criados por uma transação anulada.
Para VACUUM
no modo LITE
, utilize a seguinte sintaxe:
VACUUM table_name LITE
O modo LITE
tem o seguinte requisito:
- Você deve ter executado pelo menos uma operação de
VACUUM
bem-sucedida dentro do limite de retenção do log de transações configurado (30 dias por padrão).
Se esse requisito não for atendido, quando você tentar executar VACUUM
no modo LITE
, a seguinte mensagem de erro será exibida. Para continuar, você deve executar VACUUM
no modo FULL
.
VACUUM <tableName> LITE cannot delete all eligible files as some files are not referenced by the Delta log. Please run VACUUM FULL.
O modo FULL
é o padrão para o vácuo. Você pode executar explicitamente o modo completo com o seguinte comando:
VACUUM table_name FULL
Veja VACUUM.
Limpar exclusões somente de metadados para forçar a regravação de dados
O REORG TABLE
comando fornece a APPLY (PURGE)
sintaxe para reescrever dados para aplicar exclusões suaves. As exclusões suaves não reescrevem dados ou excluem arquivos de dados, mas usam arquivos de metadados para indicar que alguns valores de dados foram alterados. Ver REORG TABLE.
As operações que criam exclusões suaves no Delta Lake incluem o seguinte:
- Soltar colunas com mapeamento de colunas habilitado.
- Exclusão de linhas com vetores de exclusão habilitados.
- Quaisquer modificações de dados em clusters habilitados para Fóton quando vetores de exclusão estão habilitados.
Com as exclusões suaves habilitadas, os dados antigos podem permanecer fisicamente presentes nos arquivos atuais da tabela, mesmo depois que os dados tiverem sido excluídos ou atualizados. Para remover esses dados fisicamente da tabela, conclua as seguintes etapas:
- Execute o
REORG TABLE ... APPLY (PURGE)
. Depois de fazer isso, os dados antigos não estão mais presentes nos arquivos atuais da tabela, mas ainda estão presentes nos arquivos mais antigos que são usados para viagens no tempo. - Execute
VACUUM
para excluir esses arquivos mais antigos.
REORG TABLE
Cria uma nova versão da tabela à medida que a operação é concluída. Todas as versões de tabela no histórico anterior a esta transação referem-se a arquivos de dados mais antigos. Conceitualmente, isso é semelhante ao comando, onde os OPTIMIZE
arquivos de dados são reescritos mesmo que os dados na versão atual da tabela permaneçam consistentes.
Importante
Os arquivos de dados só são excluídos quando os arquivos expiraram de acordo com o período de VACUUM
retenção. Isso significa que o VACUUM
deve ser feito com um atraso após o REORG
para que os arquivos mais antigos tenham expirado. O período de retenção de VACUUM
pode ser reduzido para encurtar o tempo de espera necessário, ao custo de reduzir o histórico máximo que é mantido.
Qual o tamanho do cluster que o vácuo precisa?
Para selecionar o tamanho correto do cluster para VACUUM
o , ele ajuda a entender que a operação ocorre em duas fases:
- O trabalho começa usando todos os nós executores disponíveis para listar arquivos no diretório de origem em paralelo. Essa lista é comparada a todos os arquivos atualmente referenciados no log de transações Delta para identificar os arquivos a serem excluídos. O motorista fica parado durante esse tempo.
- Em seguida, o driver emite comandos de exclusão para cada arquivo a ser excluído. A exclusão de arquivos é uma operação somente de driver, o que significa que todas as operações ocorrem em um único nó enquanto os nós de trabalho ficam ociosos.
Para otimizar o custo e o desempenho, a Databricks recomenda o seguinte, especialmente para trabalhos de vácuo de longa duração:
- Execute vácuo em um cluster com dimensionamento automático definido para 1-4 trabalhadores, onde cada trabalhador tem 8 núcleos.
- Selecione um driver com entre 8 e 32 núcleos. Aumente o tamanho do driver para evitar erros de falta de memória (OOM).
Se VACUUM
as operações excluem regularmente mais de 10 mil arquivos ou levam mais de 30 minutos de tempo de processamento, convém aumentar o tamanho do driver ou o número de trabalhadores.
Se você achar que a lentidão ocorre ao identificar arquivos a serem removidos, adicione mais nós de trabalho. Se a lentidão ocorrer enquanto os comandos delete estão em execução, tente aumentar o tamanho do driver.
Com que frequência deve correr a vácuo?
O Databricks recomenda a execução VACUUM
regular em todas as tabelas para reduzir os custos excessivos de armazenamento de dados na nuvem. O limite de retenção padrão para vácuo é de 7 dias. Definir um limite mais alto dá-lhe acesso a um histórico maior para a sua tabela, mas aumenta o número de ficheiros de dados armazenados e, como resultado, incorre em maiores custos de armazenamento do seu fornecedor de nuvem.
Por que você não pode aspirar uma mesa Delta com um baixo limiar de retenção?
Aviso
É recomendável definir um intervalo de retenção de pelo menos 7 dias, porque instantâneos antigos e arquivos não confirmados ainda podem estar em uso por leitores ou gravadores simultâneos na tabela. Se VACUUM
limpar arquivos ativos, leitores simultâneos podem falhar ou, pior, tabelas podem ser corrompidas quando VACUUM
exclui arquivos que ainda não foram confirmados. Tem de escolher um intervalo mais longo do que a transação simultânea de execução prolongada e o período mais longo em que qualquer fluxo pode ficar aquém da atualização mais recente para a tabela.
Delta Lake tem uma verificação de segurança para evitar que você execute um comando perigoso VACUUM
. Se tiver certeza de que não há operações sendo executadas nesta tabela que levem mais do que o intervalo de retenção que você planeja especificar, você pode desativar essa verificação de segurança definindo a propriedade spark.databricks.delta.retentionDurationCheck.enabled
de configuração do Spark como false
.
Informações de auditoria
VACUUM
commits para o log de transações Delta contêm informações de auditoria. Você pode consultar os eventos de auditoria usando DESCRIBE HISTORY
.