Vetores de exclusão no Databricks
Os vetores de exclusão aceleram as operações de DELETE, UPDATE e MERGE em tabelas Delta Lake e Apache Iceberg. Sem vetores de exclusão, modificar uma única linha requer reescrever todo o arquivo Parquet que contém esse registro. Os vetores de exclusão marcam as linhas como modificadas nos metadados, e as leituras aplicam as entradas do vetor de exclusão no momento da consulta para resolver o estado atual da tabela.
Para atualizações preditivas de E/S, o Photon usa vetores de exclusão para acelerar as operações DELETE, MERGE e UPDATE. Consulte Use I/O preditivo para acelerar atualizações.
Pré-requisitos
Todas as tabelas Apache Iceberg v3 incluem vetores de exclusão por default. Veja Usar recursos do Apache Iceberg v3. Para tabelas Delta Lake, você deve habilitar explicitamente os vetores de exclusão.
Para gravar tabelas com vetores de exclusão usando todas as otimizações, use o Databricks Runtime 14.3 LTS e acima. Para lê-las, use o Databricks Runtime 12.2 LTS e acima.
No Databricks Runtime 14.2 e acima, tabelas com vetores de exclusão oferecem suporte à simultaneidade em nível de linha. Consulte Simultaneidade em nível de linha.
Compatibilidade do cliente
A Databricks usa vetores de exclusão para viabilizar E/S preditiva para atualizações em compute habilitado para Photon. Ver Usar I/O preditivo para acelerar atualizações.
A compatibilidade com o uso de vetores de exclusão para leituras e gravações varia de acordo com o cliente.
A tabela a seguir lista as versões de cliente necessárias para ler e gravar tabelas de vetor de exclusão:
Cliente | Escreva vetores de exclusão | Consultar vetores de exclusão |
|---|---|---|
Databricks Runtime com Photon | Suporta | Requer Databricks Runtime 12.2 LTS ou superior. |
Databricks Runtime sem Photon | Suporta | Requer Databricks Runtime 12.2 LTS ou superior. |
OSS Apache Spark com OSS Delta Lake | Oferece suporte a | Requer OSS Delta 2.3.0 ou acima. |
Destinatários de OpenSharing | Escritas não são suportadas em tabelas OpenSharing. | O Databricks requer Databricks Runtime 14.1 ou acima. O Apache Spark de código aberto requer |
Para suporte com outros clientes, consulte a documentação de integrações do OSS Delta Lake.
Ative vetores de exclusão
Nas configurações do workspace, você pode habilitar vetores de exclusão em novas tabelas ao usar um SQL warehouse ou Databricks Runtime 14.3 LTS ou superior. As configurações default variam por região, consulte Ative automaticamente vetores de exclusão.
Vetores de exclusão não estão ativados por default para views materializadas e tabelas de transmissão armazenadas no Hive metastore.
Para habilitar ou remover manualmente vetores de exclusão em qualquer tabela ou view, use a propriedade de tabela enableDeletionVectors.
Para ativar vetores de exclusão em uma tabela ao criar ou alterar uma tabela:
- Delta Lake table
- Iceberg table
CREATE TABLE <table-name> [options] TBLPROPERTIES ('delta.enableDeletionVectors' = true);
ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.enableDeletionVectors' = true);
CREATE TABLE <table-name> [options] TBLPROPERTIES ('iceberg.enableDeletionVectors' = true);
ALTER TABLE <table-name> SET TBLPROPERTIES ('iceberg.enableDeletionVectors' = true);
Não é possível usar uma instrução ALTER para habilitar ou remover vetores de exclusão em uma view materializada ou tabela de transmissão. É necessário usar uma instrução CREATE TABLE.
Ao habilitar vetores de exclusão, o Databricks atualiza o protocolo da tabela. Após a atualização, os clientes sem suporte para vetores de exclusão não conseguem ler a tabela. Consulte a compatibilidade de recursos e protocolos do Delta Lake.
Em Databricks Runtime 14,1 e acima, você pode descartar o recurso de tabela de vetores de exclusão para habilitar a compatibilidade com outros clientes. Consulte Remover um recurso de tabela do Delta Lake e fazer downgrade do protocolo da tabela.
Aplicar exclusões lógicas a arquivos de dados
Vetores de exclusão marcam alterações nas linhas como exclusões lógicas que modificam logicamente os arquivos de dados Parquet existentes na tabela. Para reescrever fisicamente os arquivos de dados Parquet, faça um dos seguintes:
- Faça a execução de
OPTIMIZEna tabela. - Execute
REORG TABLE ... APPLY (PURGE)na tabela. Este comando reescreve todos os arquivos de dados que contêm registros com alterações de vetor de exclusão. See REORG TABLE. - Realize a execução de uma gravação com compactação automática, que aciona a reescrita de um arquivo de dados com um vetor de exclusão.
Os eventos de compactação de arquivo não têm garantias rigorosas para resolver as alterações registradas nos vetores de exclusão. Algumas alterações registradas nos vetores de exclusão podem não ser aplicadas fisicamente se os arquivos de dados de destino não forem candidatos à compactação de arquivo.
Excluir fisicamente dados antigos
Dados modificados ainda podem existir nos arquivos de dados antigos de uma tabela após uma operação de limpeza. Poderá ser necessário remover fisicamente os dados, por exemplo, para reduzir os custos de armazenamento com seu provedor de nuvem ou para cumprir as solicitações de GDPR.
Para excluir fisicamente dados antigos:
- Executar
REORG TABLE ... APPLY (PURGE) - Execute
VACUUMcom o limite de retenção definido como o carimbo de data/hora de conclusão da limpeza para remover fisicamente os arquivos das versões de tabela anteriores. Consulte Limpar exclusões somente de metadados para forçar a regravação de dados.
Melhore o desempenho para tabelas grandes
Para melhorar o desempenho de eliminações em tabelas grandes, defina spark.databricks.delta.reorg.purgeMode como rows.
Por exemplo, defina esta configuração ao remover dados manualmente com REORG TABLE ... APPLY (PURGE) ou ao remover vetores de exclusão com ALTER TABLE DROP FEATURE deletionVectors.
Por padrão, spark.databricks.delta.reorg.purgeMode está definido como all. Em tabelas grandes, esta operação pode ser lenta porque as operações de limpeza devem digitalizar todos os rodapés dos arquivos Parquet para verificar dados de colunas descartadas e linhas excluídas de forma flexível.
O valor rows limita a operação a processar apenas arquivos com linhas de exclusão lógica. Em tabelas grandes, isso pode melhorar o desempenho se muitos arquivos não contiverem linhas com exclusão lógica e a tabela não tiver colunas descartadas.
Limitações
-
UniForm Iceberg v2 não oferece suporte a vetores de exclusão. O Apache Iceberg v3 oferece suporte a vetores de exclusão em tabelas com o UniForm ativado. Veja Usar recursos v3 do Apache Iceberg.
-
Você não pode usar uma instrução GENERATE para gerar um arquivo de manifesto para uma tabela que tem arquivos usando vetores de exclusão. Para gerar um manifesto, primeiro execute um comando REORG TABLE … APPLY (PURGE) e então execute o comando
GENERATE. É necessário verificar se não há operações de gravação concorrentes em execução ao enviar a instruçãoREORG.- Não é possível gerar arquivos manifest incrementalmente para uma tabela com vetores de exclusão ativados (por exemplo, ao definir a propriedade da tabela
delta.compatibility.symlinkFormatManifest.enabled=true).
- Não é possível gerar arquivos manifest incrementalmente para uma tabela com vetores de exclusão ativados (por exemplo, ao definir a propriedade da tabela
-
Se os vetores de exclusão forem ativados em uma view materializada ou Tabela de transmissão e forem removidos em seguida, os vetores de exclusão não se aplicarão a gravações futuras na view ou na tabela, mas os vetores de exclusão existentes permanecerão.
-
Não é possível fazer o downgrade do protocolo da tabela após habilitar vetores de exclusão em uma view materializada ou tabela de transmissão, mesmo que você desative posteriormente os vetores de exclusão.