Vettori di eliminazione in Databricks

I vettori di eliminazione accelerano le operazioni DELETE, UPDATE e MERGE sulle tabelle Delta Lake e Apache Iceberg. Senza vettori di eliminazione, la modifica di una singola riga richiede la riscrittura dell'intero file Parquet contenente tale record. I vettori di eliminazione contrassegnano invece le righe come modificate nei metadati e le letture applicano le voci del vettore di eliminazione in fase di query per risolvere lo stato corrente della tabella.

Nota

Per gli aggiornamenti di I/O predittivi, Photon utilizza vettori di eliminazione per accelerare le operazioni DELETE, MERGE e UPDATE. Vedere Usare l'I/O predittiva per accelerare gli aggiornamenti.

Prerequisites

Tutte le tabelle Apache Iceberg v3 includono vettori di eliminazione per impostazione predefinita. Vedere Usare le funzionalità di Apache Iceberg v3. Per le tabelle Delta Lake, è necessario abilitare in modo esplicito i vettori di eliminazione.

Per scrivere tabelle con vettori di eliminazione usando tutte le ottimizzazioni, usare Databricks Runtime 14.3 LTS e versioni successive. Per leggerli, usare Databricks Runtime 12.2 LTS e versioni successive.

In Databricks Runtime 14.2 e versioni successive le tabelle con vettori di eliminazione supportano la concorrenza a livello di riga. Consulta Concorrenza a livello di riga.

Compatibilità client

Azure Databricks utilizza vettori di cancellazione per ottimizzare le operazioni di I/O predittive per gli aggiornamenti nel calcolo abilitato da Photon. Vedere Usare l'I/O predittiva per accelerare gli aggiornamenti.

Il supporto per l'uso di vettori di eliminazione per letture e scritture varia in base al client.

Nella tabella seguente sono elencate le versioni client necessarie per leggere e scrivere tabelle vettoriali di eliminazione:

Client Scrivere vettori di eliminazione Leggere i vettori di eliminazione
Databricks Runtime con Photon Supporta MERGE, UPDATEe DELETE l'uso di Databricks Runtime 12.2 LTS e versioni successive. È necessario Databricks Runtime 12.2 LTS o versione successiva.
Databricks Runtime senza Photon Supporta DELETE l'uso di Databricks Runtime 12.2 LTS e versioni successive. Supporta UPDATE l'uso di Databricks Runtime 14.1 e versioni successive. Supporta MERGE l'uso di Databricks Runtime 14.3 LTS e versioni successive. È necessario Databricks Runtime 12.2 LTS o versione successiva.
OSS Apache Spark con OSS Delta Lake Supporta DELETE l'uso di OSS Delta 2.4.0 e versioni successive. Supporta UPDATE l'uso di OSS Delta 3.0.0 e versioni successive. Richiede OSS Delta 2.3.0 o versione successiva.
Destinatari OpenSharing Le operazioni di scrittura non sono consentite sulle tabelle OpenSharing. Azure Databricks richiede Databricks Runtime 14.1 o versione successiva. Apache Spark open source richiede delta-sharing-spark la versione 3.1 o successiva.

Per il supporto con altri client, vedere la documentazione relativa alle integrazioni di OSS Delta Lake.

Abilitare i vettori di eliminazione

Nelle impostazioni dell'area di lavoro è possibile abilitare i vettori di eliminazione nelle nuove tabelle quando si usa un'istanza di SQL Warehouse o Databricks Runtime 14.3 LTS o versione successiva. Le impostazioni predefinite variano in base all'area, vedere Vettori di eliminazione con abilitazione automatica.

I vettori di eliminazione non sono abilitati per impostazione predefinita per le viste materializzate e le tabelle di streaming archiviate nel metastore Hive.

Per abilitare o rimuovere manualmente vettori di eliminazione in qualsiasi tabella o vista, utilizzare la enableDeletionVectors proprietà table.

Per abilitare i vettori di eliminazione in una tabella quando si crea o si modifica una tabella:

Delta Lake

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

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

Tabella Iceberg

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

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

Non è possibile usare un'istruzione ALTER per abilitare o rimuovere vettori di eliminazione in una vista materializzata o in una tabella di streaming. È necessario usare un'istruzione CREATE TABLE .

Warning

Quando si abilitano i vettori di eliminazione, Databricks aggiorna il protocollo di tabella. Dopo l'aggiornamento, i client senza supporto del vettore di eliminazione non possono leggere la tabella. Vedere Compatibilità e protocolli delle funzionalità delta Lake.

In Databricks Runtime 14.1 e versioni successive è possibile eliminare la funzionalità di tabella dei vettori di eliminazione per abilitare la compatibilità con altri client. Vedere Eliminare una funzionalità di tabella Delta Lake e effettuare il downgrade del protocollo di tabella.

Applicare eliminazioni temporanea ai file di dati

I vettori di eliminazione contrassegnano come eliminazioni logiche le modifiche apportate alle righe, che modificano logicamente i file di dati Parquet esistenti della tabella. Per riscrivere fisicamente i file di dati Parquet, eseguire una delle operazioni seguenti:

  • Esegui OPTIMIZE sul tavolo.
  • Esegui REORG TABLE ... APPLY (PURGE) sul tavolo. Questo comando riscrive tutti i file di dati contenenti record con modifiche al vettore di eliminazione. Vedete REORG TABLE.
  • Eseguire una scrittura con compattazione automatica, che attiva una riscrittura di un file di dati con un vettore di eliminazione.

Gli eventi di compattazione dei file non hanno garanzie rigorose per la risoluzione delle modifiche registrate nei vettori di eliminazione. Alcune modifiche registrate nei vettori di eliminazione potrebbero non essere applicate fisicamente se i file di dati di destinazione non sono candidati per la compattazione dei file.

Eliminare fisicamente i dati obsoleti

I dati modificati potrebbero essere ancora presenti nei file di dati precedenti di una tabella dopo un'operazione di eliminazione. È possibile rimuovere fisicamente i dati, ad esempio, per ridurre i costi di archiviazione con il provider di servizi cloud o per rispettare le richieste GDPR.

Per eliminare fisicamente i dati obsoleti:

  1. Eseguire REORG TABLE ... APPLY (PURGE)
  2. Esegui VACUUM con la soglia di conservazione impostata sul timestamp di completamento della purga per rimuovere fisicamente i file dalle versioni precedenti della tabella. Per forzare la riscrittura dei dati, vedere Eliminare solo i metadati.

Migliorare le prestazioni per tabelle di grandi dimensioni

Per migliorare le prestazioni delle operazioni di eliminazione su tabelle di grandi dimensioni, impostare spark.databricks.delta.reorg.purgeMode su rows.

Ad esempio, impostare questa configurazione quando si eliminano i dati manualmente con REORG TABLE ... APPLY (PURGE) o quando si rimuovono vettori di eliminazione con ALTER TABLE DROP FEATURE deletionVectors.

Per impostazione predefinita, spark.databricks.delta.reorg.purgeMode è impostato su all. Nelle tabelle di grandi dimensioni, questa operazione potrebbe essere lenta perché le operazioni di eliminazione devono analizzare tutti i piè di pagina dei file Parquet per verificare la presenza di dati delle colonne eliminate e di righe eliminate affatto.

Il valore rows limita l'operazione per gestire solo i file con righe eliminate in modo soft. Nelle tabelle di grandi dimensioni, questo potrebbe migliorare le prestazioni se molti file non contengono righe eliminate affatto e la tabella non contiene colonne eliminate.

Limitazioni

  • UniForm Iceberg v2 non supporta i vettori di eliminazione. Apache Iceberg v3 supporta vettori di eliminazione nelle tabelle con UniForm abilitato. Vedere Usare le funzionalità di Apache Iceberg v3.
  • Non è possibile utilizzare un'istruzione GENERATE per generare un file manifesto per una tabella con file che usano vettori di eliminazione. Per generare un manifesto, è necessario prima eseguire un'istruzione REORG TABLE ... APPLY (PURGE) e successivamente eseguire l'istruzione GENERATE. È necessario verificare che non siano in esecuzione operazioni di scrittura simultanee quando si invia l'istruzione REORG .
    • Non è possibile generare in modo incrementale i file manifesto per una tabella con vettori di eliminazione abilitati, ad esempio impostando la proprietà della tabella delta.compatibility.symlinkFormatManifest.enabled=true).
  • Se si abilitano i vettori di eliminazione in una vista materializzata o in una tabella di streaming e successivamente si rimuovono vettori di eliminazione, i vettori di eliminazione non si applicano alle scritture future nella vista o nella tabella, ma i vettori di eliminazione esistenti rimangono.
  • Non è possibile effettuare il downgrade del protocollo di tabella dopo aver abilitato i vettori di eliminazione in una vista materializzata o in una tabella di streaming, anche se successivamente si disattivano i vettori di eliminazione.