Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Remover ficheiros de dados que já não são referenciados por uma tabela e que sejam mais antigos do que o limiar 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
VACUUMpodem 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.
Em tabelas com leituras Iceberg ativadas, VACUUM também limpa os metadados Iceberg para versões mais antigas das tabelas. Consulte VACUUM e a limpeza de metadados do Iceberg.
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.
Advertências sobre a utilização de 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.
Algumas funcionalidades de tabelas, como vetores de eliminação, usam ficheiros de metadados para marcar dados como eliminados em vez de reescrever ficheiros de dados. Use REORG TABLE ... APPLY (PURGE) para confirmar estas eliminações e reescrever ficheiros de dados. Consulte Purgar apenas exclusões de metadados para forçar a reescrita de dados.
Importante
- No Databricks Runtime 13.3 LTS e superiores,
VACUUMa semântica para clones superficiais com tabelas geridas pelo Unity Catalog difere de outras tabelas. Veja UseVACUUMcom clones superficiais do Unity Catalog. -
VACUUMremove todos os ficheiros de diretórios não geridos pelo Azure Databricks, ignorando os diretórios que começam por_ou.. Se estiver a armazenar metadados adicionais, tais como checkpoints de streaming estruturado, num diretório de uma tabela, use um nome de diretório tal como_checkpoints.- O feed de dados para alteração é gerido no
_change_datadiretório e removido comVACUUM. Veja Usar feed de dados de alterações no Azure Databricks. - Os índices do filtro de Bloom (obsoletos) utilizam o
_delta_indexdiretório.VACUUMlimpa arquivos neste diretório. Ver índices de filtro de Bloom (obsoletos).
- O feed de dados para alteração é gerido no
- A capacidade de consultar versões de tabela anteriores ao período de retenção é perdida após executar
VACUUM. - 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çãoVACUUMem uma tabela remove os arquivos de dados necessários para a viagem no tempo. - Quando o cache de disco está ativado, um cluster pode conter dados de arquivos Parquet que foram excluídos com
VACUUM. 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
Para remover ficheiros que já não são exigidos por versões anteriores ao período de retenção padrão, execute VACUUM sem configurações adicionais:
VACUUM table_name
Para pré-visualizar a lista de ficheiros a eliminar sem os remover, execute VACUUM com DRY RUN:
VACUUM table_name DRY RUN
Para obter detalhes da sintaxe do Spark SQL, consulte VACUUM.
Para detalhes da sintaxe em Scala, Java e Python, consulte a documentação da API Delta Lake.
Note
No Databricks Runtime 18.0 e superiores, use a propriedade de tabela deletedFileRetentionDuration para controlar a retenção. Para tabelas geridas pelo Unity Catalog, isto aplica-se ao Databricks Runtime 13.3 LTS e superiores.
Consulte Configuração de retenção de dados para consultas de viagem no tempo.
Modo completo versus lite
Importante
Esta funcionalidade está disponível em Pré-visualização Pública no Databricks Runtime 16.4 LTS e superiores.
Para melhorar o desempenho e reduzir os custos, evitando listar todos os ficheiros no diretório da tabela, especifique a palavra-chave LITE na instrução VACUUM para ativar um modo alternativo de VACUUM. Isto é útil para tabelas grandes que requerem operações frequentes VACUUM .
LITE O modo usa o registo de transações para identificar ficheiros de dados que já não estão dentro do VACUUM limiar de retenção e remove esses ficheiros da tabela.
Note
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 FULL é o padrão para o vácuo. Você pode executar explicitamente o modo completo com o seguinte comando:
VACUUM table_name FULL
Consulte VACUUM.
Requirements
O modo LITE tem o seguinte requisito:
- Você deve ter executado pelo menos uma operação de
VACUUMbem-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 LITE modo, 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 log. Please run VACUUM FULL.
Eliminar exclusões apenas de metadados para forçar a regravação de dados
O REORG TABLE comando com a APPLY (PURGE) sintaxe permite-lhe reescrever dados para aplicar eliminaçõ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. Consulte REORG TABLE.
As operações que criam eliminações suaves incluem as seguintes:
- Remover colunas com o mapeamento de colunas ativado.
- Quaisquer modificações de dados com vetores de exclusão ativados.
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
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
VACUUMpara 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. Isto significa que VACUUM deve ser feito com algum atraso após REORG, para garantir que os ficheiros mais antigos expiraram. 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.
Recomendações de tamanho de cluster para o vácuo
Para selecionar o tamanho correto do cluster para VACUUM, considere 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. O trabalho compara esta lista com todos os ficheiros atualmente referenciados no registo de transações para identificar ficheiros a eliminar. O motorista fica parado durante esse tempo.
- O driver emite comandos de eliminação para cada ficheiro identificado para eliminação. Como a eliminação de ficheiros é uma operação exclusiva do controlador, todas as operações decorrem num único nó, enquanto os nós de trabalho permanecem inativos.
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.
Frequência de vácuo recomendada
O Databricks recomenda executar VACUUM regularmente 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 limiar mais elevado 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, aumenta os custos de armazenamento do seu fornecedor de cloud.
Vácuo e limiares baixos de retenção
Warning
O Databricks recomenda fortemente definir um intervalo de retenção de pelo menos 7 dias. Se tiver trabalhos que duram vários dias, os trabalhos de longa duração podem criar ficheiros que ainda não estão confirmados. Se o seu período de retenção for demasiado curto, VACUUM pode apagar esses ficheiros não comprometidos antes de o trabalho terminar.
Há uma verificação de segurança para evitar que executes um comando perigoso VACUUM . Se tiver a certeza de que não há operações a correr nesta tabela que demore mais do que o intervalo de retenção que planeia especificar, desative esta verificação de segurança definindo a retentionDurationCheck configuração do Spark para false:
Delta
SET spark.databricks.delta.retentionDurationCheck.enabled = false
Iceberg
SET spark.databricks.iceberg.retentionDurationCheck.enabled = false
Informações de auditoria
VACUUM Envia a informação da auditoria ao registo de transações. Consulte os eventos de auditoria usando DESCRIBE HISTORY.
Por padrão, o registo de eventos de auditoria está habilitado em todas as plataformas para tabelas sob gestão do Unity Catalog. Controle o registo de auditoria do vacuum com a configuração do vacuum.logging Spark:
Delta
SET spark.databricks.delta.vacuum.logging.enabled = true
Iceberg
SET spark.databricks.iceberg.vacuum.logging.enabled = true
Para aplicar esta configuração a todo um espaço de trabalho, em todos os clusters, utilize uma política de cluster e adicione o seguinte ao JSON da política:
Delta
{
"spark_conf.spark.databricks.delta.vacuum.logging.enabled": {
"type": "fixed",
"value": "true"
}
}
Iceberg
{
"spark_conf.spark.databricks.iceberg.vacuum.logging.enabled": {
"type": "fixed",
"value": "true"
}
}
Consulte Criar e gerenciar políticas de computação.
Note
O registo de auditoria também está ativado por padrão para tabelas externas.