Pular para o conteúdo principal

Vetores de exclusão no Databricks

Vetores de exclusão são um recurso de otimização de armazenamento que acelera modificações em tabelas. Por padrão, a exclusão de uma única linha exige a reescrita de todo o arquivo Parquet que contém esse registro. Vetores de exclusão evitam essa sobrecarga. Quando os vetores de exclusão estão ativados, as operações DELETE, UPDATE e MERGE marcam as linhas como modificadas sem reescrever o arquivo Parquet. As leituras resolvem então o estado atual da tabela aplicando as modificações registradas nos vetores de exclusão.

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.

O Databricks recomenda o uso do Databricks Runtime 14.3 LTS e acima para gravar tabelas com vetores de exclusão para usar todas as otimizações. Para ler tabelas com vetores de exclusão habilitados, use Databricks Runtime 12.2 LTS ou 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.

nota

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.

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 o suporte para vetores de exclusão em qualquer tabela ou view, incluindo tabelas de transmissão e views materializadas, use a propriedade de tabela enableDeletionVectors. Para ativar vetores de exclusão em uma tabela ao criar ou alterar uma tabela:

SQL
CREATE TABLE <table-name> [options] TBLPROPERTIES ('delta.enableDeletionVectors' = true);

ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.enableDeletionVectors' = true);

Não é possível usar uma instrução ALTER para ativar ou remover vetores de exclusão em uma visualização materializada ou tabela de streaming.

atenção

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 alterações aos arquivos de dados Parquet

Vetores de exclusão indicam alterações nas linhas como exclusões lógicas que modificam logicamente os arquivos de dados Parquet existentes na tabela. Essas alterações são aplicadas fisicamente quando um dos seguintes eventos causa a reescrita dos arquivos de dados:

  • Um comando OPTIMIZE é executado na tabela.
  • A compactação automática aciona uma reescrita de um arquivo de dados com um vetor de exclusão.
  • REORG TABLE ... APPLY (PURGE) é executado na tabela.

Eventos relacionados à compactação de arquivos não têm garantias estritas para resolver as alterações registradas em vetores de deleção. Algumas alterações registradas em vetores de exclusão podem não ser aplicadas fisicamente se os arquivos de dados de destino não forem candidatos à compactação de arquivos. REORG TABLE ... APPLY (PURGE) reagrava todos os arquivos de dados contendo registros com modificações registradas usando vetores de exclusão. See REORG TABLE.

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.

Execute VACUUM para remover fisicamente os arquivos antigos. A operação REORG TABLE ... APPLY (PURGE) cria uma nova versão da tabela quando é concluída. Para remover completamente arquivos excluídos de versões anteriores da tabela, é preciso definir o limite de retenção para VACUUM para o carimbo de data/hora de conclusão da operação de limpeza. Consulte Limpar exclusões somente de metadados para forçar a reescrita de dados.

Melhore o desempenho para tabelas grandes

Para melhorar o desempenho ao limpar dados excluídos de forma reversível em tabelas grandes, defina spark.databricks.delta.reorg.purgeMode como rows. Por exemplo, defina esta configuração ao purgar 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.

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 mostra as versões de cliente necessárias para leitura e gravação de tabelas com vetores de exclusão ativados e especifica quais operações de gravação usam vetores de exclusão:

Cliente

Escreva vetores de exclusão

Consultar vetores de exclusão

Databricks Runtime com Photon

Suporta MERGE, UPDATE e DELETE usando Databricks Runtime 12.2 LTS e acima.

Requer Databricks Runtime 12.2 LTS ou superior.

Databricks Runtime sem Photon

Suporta DELETE no Databricks Runtime 12.2 LTS e acima. Oferece suporte a UPDATE usando o Databricks Runtime 14.1 e acima. Oferece suporte para MERGE usando Databricks Runtime 14.3 LTS e acima.

Requer Databricks Runtime 12.2 LTS ou superior.

OSS Apache Spark com OSS Delta Lake

Oferece suporte a DELETE usando OSS Delta 2.4.0 e acima. Suporta UPDATE usando OSS Delta 3.0.0 e acima.

Requer OSS Delta 2.3.0 ou acima.

Destinatários de OpenSharing

Escritas não são suportadas em tabelas OpenSharing.

Databricks: Requer Databricks Runtime 14.1 ou acima. Apache Spark de código aberto: requer delta-sharing-spark 3.1 ou acima.

Para suporte com outros clientes, consulte a documentação de integrações do OSS Delta Lake.

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 garantir que não haja operações de gravação concorrentes em execução ao submeter a declaração REORG.
  • 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).
  • 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 downgrade do protocolo da tabela após ativar vetores de exclusão em uma materialized view ou tabela de transmissão. Após a ativação, o recurso da tabela para vetores de exclusão não pode ser removido, mesmo que os vetores de exclusão sejam posteriormente desativados na view ou na tabela.