Vetores de eliminação em Databricks

Os vetores de eliminação são uma funcionalidade de otimização de armazenamento que acelera as modificações das tabelas. Por padrão, eliminar uma única linha requer reescrever o ficheiro Parquet inteiro que contém esse registo. Os vetores de eliminação evitam esta sobrecarga. Quando vetores de eliminação estão ativados, as operações DELETE, UPDATE e MERGE marcam as linhas como modificadas sem reescrever o ficheiro Parquet. As leituras resolvem então o estado atual da tabela aplicando as modificações registadas nos vetores de eliminação.

O Databricks recomenda o uso do Databricks Runtime 14.3 LTS e superior para escrever tabelas com vetores de exclusão para usar todas as otimizações. Para ler tabelas com vetores de eliminação ativados, use o Databricks Runtime 12.2 LTS e posteriores.

No Databricks Runtime 14.2 e posterior, tabelas com vetores de exclusão suportam concorrência em nível de linha. Ver Concorrência a nível de linha.

Observação

Para atualizações preditivas de E/S, o Photon utiliza vetores de eliminação para acelerar as operações DELETE, MERGE e UPDATE. Consulte Usar E/S preditiva para acelerar as atualizações.

Habilitar vetores de exclusão

Nas definições do workspace podes ativar vetores de eliminação em novas tabelas quando usas um SQL warehouse ou Databricks Runtime 14.3 LTS ou superior. As definições padrão variam consoante a região; consulte Vetores de eliminação com ativação automática.

Os vetores de exclusão não são habilitados por padrão para exibições materializadas e tabelas de streaming armazenadas no metastore do Hive.

Para ativar ou remover manualmente o suporte para vetores de eliminação em qualquer tabela ou vista, incluindo tabelas de streaming e vistas materializadas, use a propriedade de tabela enableDeletionVectors. Para ativar vetores de eliminação numa tabela quando cria ou altera uma tabela:

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

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

Não podes usar uma ALTER instrução para ativar ou remover vetores de eliminação numa vista materializada ou numa tabela Streaming.

Para tabelas Iceberg, use iceberg.enableDeletionVectors em vez de delta.enableDeletionVectors.

Advertência

Quando ativas vetores de eliminação, o Databricks atualiza o protocolo da tabela. Depois de atualizar, os clientes sem suporte a vetor de eliminação não conseguem ler a tabela. Consulte Compatibilidade de recursos e protocolos do Delta Lake.

No Databricks Runtime 14.1 e superiores, pode remover a funcionalidade da tabela de vetores de eliminação para permitir a compatibilidade com outros clientes. Consulte Remover uma funcionalidade da tabela Delta Lake e fazer downgrade do protocolo da tabela.

Aplicar alterações aos arquivos de dados do Parquet

Vetores de eliminação indicam alterações às linhas como remoções suaves que modificam de forma lógica ficheiros de dados Parquet existentes na tabela. Essas alterações são aplicadas fisicamente quando um dos seguintes eventos faz com que os arquivos de dados sejam reescritos:

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

Eventos relacionados com compactação de ficheiros não têm garantias estritas para resolver alterações registadas em vetores de eliminação. Algumas alterações registadas nos vetores de eliminação podem não ser fisicamente aplicadas se os ficheiros de dados alvo não forem candidatos à compactação de ficheiros. REORG TABLE ... APPLY (PURGE) Reescreve todos os arquivos de dados contendo registros com modificações gravadas usando vetores de exclusão. Consulte REORG TABLE.

Eliminar fisicamente dados antigos

Os dados modificados podem ainda existir nos ficheiros antigos de uma tabela após uma operação de purga. Pode querer remover fisicamente os dados, por exemplo, para reduzir custos de armazenamento com o seu fornecedor de cloud ou para cumprir os pedidos do RGPD.

Corre VACUUM para apagar fisicamente os ficheiros antigos. A REORG TABLE ... APPLY (PURGE) operação cria uma nova versão da tabela quando esta termina. Para remover completamente ficheiros anteriormente eliminados nas versões das tabelas, deve definir o limiar de retenção para VACUUM como o carimbo temporal da conclusão da operação de purga. Consulte Purgar apenas exclusões de metadados para forçar a reescrita de dados.

Melhorar o desempenho para tabelas grandes

Para melhorar o desempenho ao eliminar dados apagados suavemente em tabelas grandes, defina spark.databricks.delta.reorg.purgeMode para rows. Por exemplo, defina esta configuração ao purgar dados manualmente com REORG TABLE ... APPLY (PURGE) ou ao remover vetores de eliminação com ALTER TABLE DROP FEATURE deletionVectors.

Por padrão, spark.databricks.delta.reorg.purgeMode é definido como all. Em tabelas grandes, esta operação pode ser lenta porque as operações de purga têm de analisar todos os rodapés de ficheiro Parquet para verificar tanto dados de colunas caídos como linhas apagadas de forma suave.

O rows valor limita a operação a tratar apenas ficheiros com linhas apagadas suavemente. Em tabelas grandes, isto pode melhorar o desempenho se muitos ficheiros não conterem linhas apagadas suavemente e a tabela não tiver colunas eliminadas.

Compatibilidade com clientes

O Azure Databricks usa vetores de eliminação para otimizar a E/S preditiva nas atualizações feitas na computação com Photon. Consulte Usar E/S preditiva para acelerar as atualizações.

O suporte para o uso de vetores de exclusão para leituras e gravações varia de acordo com o cliente.

A tabela seguinte mostra as versões necessárias do cliente para ler e escrever tabelas com vetores de eliminação ativados e especifica quais as operações de escrita que utilizam vetores de eliminação:

Cliente Vetores de eliminação de escrita Ler vetores de exclusão
Tempo de execução do Databricks com Photon Suporta MERGE, UPDATEe DELETE usando Databricks Runtime 12.2 LTS e superior. Requer Databricks Runtime 12.2 LTS ou superior.
Tempo de execução do Databricks sem fóton Suporta DELETE o uso do Databricks Runtime 12.2 LTS e superior. Suporta UPDATE o uso do Databricks Runtime 14.1 e superior. Suporta MERGE com Databricks Runtime 14.3 LTS e versões superiores. Requer Databricks Runtime 12.2 LTS ou superior.
OSS Apache Spark com OSS Delta Lake Suporta DELETE o uso de OSS Delta 2.4.0 e superior. Suporta o uso de UPDATE com o OSS Delta 3.0.0 e versões superiores. Requer OSS Delta 2.3.0 ou superior.
Destinatários do Delta Sharing As gravações não são suportadas em tabelas Delta Sharing. Databricks: Requer Databricks Runtime 14.1 ou superior. Apache Spark de código aberto: Requer delta-sharing-spark 3.1 ou superior.

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

Limitações

  • O UniForm Iceberg v2 não suporta vetores de exclusão. O Apache Iceberg v3 suporta vetores de eliminação em tabelas com UniForm ativado. Consulte Usar recursos do Apache Iceberg v3.
  • Não é possível usar uma instrução GENERATE para gerar um arquivo de manifesto para uma tabela que tenha arquivos usando vetores de exclusão. Para gerar um manifesto, primeiro execute a instrução REORG TABLE ... APPLY (PURGE) e, em seguida, execute a instrução GENERATE. Você deve garantir que nenhuma operação de gravação simultânea esteja a ocorrer quando enviar a instrução REORG.
  • Não é possível gerar incrementalmente ficheiros de manifesto para uma tabela com vetores de eliminação ativados (por exemplo, definindo a propriedade delta.compatibility.symlinkFormatManifest.enabled=true).
  • Se ativar vetores de eliminação numa vista materializada ou numa tabela Streaming e posteriormente remover esses vetores de eliminação, estes não se aplicam a futuras escritas na vista ou tabela, mas os vetores de eliminação existentes permanecem.
  • Não é possível rebaixar o protocolo da tabela depois de ativar vetores de eliminação em uma vista materializada ou tabela de streaming. Depois de ativar, o recurso de tabela para vetores de exclusão não pode ser removido, mesmo se você desativar posteriormente vetores de exclusão na exibição ou tabela.