Riorganizzare le tabelle Delta con REORG

Usare il REORG comando quando è necessario riscrivere parte di una tabella Delta per un obiettivo di manutenzione specifico. In Fabric, REORG riorganizza il layout fisico di una tabella riscrivendo i file di dati o aggiornando i metadati della tabella, a seconda dell'opzione scelta.

REORG è diverso dalla compattazione dei file di routine. È destinato a scenari quali la rimozione fisica delle righe che i vettori di eliminazione hanno contrassegnato come eliminate.

Operazioni di REORG

REORG TABLE riscrive lo stato della tabella per un'operazione di manutenzione definita.

  • APPLY (PURGE) riscrive i file di dati interessati in modo che le righe eliminate temporaneamente tramite vettori di eliminazione vengano fisicamente rimosse dai file Parquet sottostanti.

Usare REORG quando è necessario un risultato di riscrittura specifico, non solo più piccoli o meno file.

Usare PURGE per rimuovere fisicamente le righe eliminate temporaneamente

I vettori di eliminazione consentono a Delta Lake di contrassegnare immediatamente le righe come eliminate senza riscrivere immediatamente i file Parquet originali. Questo comportamento mantiene efficienti le operazioni di eliminazione, ma i dati delle righe eliminati sono ancora presenti nei file fisici fino a quando non vengono riscritti.

Quando si esegue REORG TABLE ... APPLY (PURGE), Fabric riscrive i file interessati e rimuove le righe eliminate in modo soft dai file Parquet attivi. Al PURGE termine, le righe eliminate vengono effettivamente rimosse dai file riscritti.

Note

PURGE non è in genere necessario come passaggio di manutenzione separato. OPTIMIZE elimina automaticamente i file in cui viene fatto riferimento a più di 5% di record dai vettori di eliminazione durante la compattazione. Usa PURGE nei casi in cui devi controllare esplicitamente quando le righe eliminate logicamente vengono rimosse fisicamente.

Questa opzione è utile quando:

  • Hai requisiti di conformità e hai bisogno che i dati cancellati vengano rimossi fisicamente secondo una programmazione specifica.
  • Si desidera forzare l'eliminazione dei file che scendono al di sotto della soglia del 5% utilizzata da OPTIMIZE.

Rimuovere definitivamente i dati cancellati

Il REORG TABLE ... APPLY (PURGE) comando riscrive i file dati attivi, ma i file sostituiti rimangono in OneLake come file non referenziati finché non VACUUM vengono rimossi. Poiché gli utenti possono ancora utilizzare il viaggio nel tempo o il ripristino per accedere ai record cancellati, per rimuovere permanentemente i dati cancellati, esegui VACUUM dopo PURGE.

Di default, VACUUM conserva i file non referenziati per sette giorni. Se devi rimuovere immediatamente i file, disabilita temporaneamente il controllo di sicurezza del periodo di conservazione per la sessione Spark corrente, esegui VACUUM con un periodo di conservazione pari a zero ore, quindi riattiva il controllo di sicurezza.

Avvertimento

La ritenzione a zero ore rimuove permanentemente immediatamente tutti i file non referenziati. Può interrompere lettori o scrittori simultanei e impedisce il viaggio nel tempo verso le versioni delle tabelle che dipendono da quei file. Conferma che nessuna operazione concorrente stia usando la tabella prima di continuare.

Eseguire i comandi nell'ordine seguente:

REORG TABLE schema_name.table_name APPLY (PURGE);

SET spark.databricks.delta.retentionDurationCheck.enabled = false;
VACUUM schema_name.table_name RETAIN 0 HOURS;
SET spark.databricks.delta.retentionDurationCheck.enabled = true;

La modifica di configurazione si applica solo alla sessione Spark corrente. Riattiva sempre il controllo di sicurezza dopo la pulizia immediata. Se non è richiesta la rimozione immediata, mantieni abilitato il controllo di sicurezza ed esegui VACUUM al termine del periodo di conservazione richiesto.

Per maggiori informazioni sulla ritenzione e il suo effetto sui viaggi nel tempo, consulta le tabelle VACUUM Delta.

Esaminare la sintassi

Utilizzare gli esempi seguenti in un notebook Fabric.

Rimuovere definitivamente da una tabella le righe eliminate temporaneamente

REORG TABLE table_name APPLY (PURGE)

Eliminare definitivamente le righe eliminate temporaneamente solo per i dati corrispondenti

REORG TABLE table_name WHERE predicate APPLY (PURGE)

Usare una WHERE clausola quando si desidera specificare partizioni specifiche o una sezione di dati più piccola.

REORG TABLE sales.orders
WHERE order_date = DATE '2026-05-01'
APPLY (PURGE)

Scegliere REORG o OPTIMIZE

REORG e OPTIMIZE risolvono problemi diversi.

  • OPTIMIZE esegue la compattazione dei contenitori. Consolida i file di piccole dimensioni in file di dimensioni maggiori per migliorare l'efficienza dell'analisi.
  • REORG ... APPLY (PURGE) rimuove fisicamente le righe che i vettori di eliminazione hanno contrassegnato come eliminate.

È possibile usare entrambi i comandi insieme. Ad esempio, è possibile eseguire REORG ... APPLY (PURGE) per rimuovere fisicamente i dati eliminati, quindi eseguire OPTIMIZE per migliorare il layout dei file.

Comprendere i vettori di eliminazione

I vettori di eliminazione sono strutture di metadati che contrassegnano le righe come eliminate senza riscrivere immediatamente i file Parquet che contengono tali righe. I lettori rispettano i vettori di eliminazione, quindi le righe eliminate non vengono visualizzate nei risultati della query, ma i byte rimangono ancora in archiviazione fino a quando non si verifica una riscrittura.

REORG ... APPLY (PURGE) è il passaggio che rimuove fisicamente tali righe dai file Parquet riscritti.

Eseguire REORG in Fabric

Esegui REORG da esperienze basate su Spark in Fabric, ad esempio:

  • Notebook di Fabric
  • Definizioni dei job Spark

Non eseguire REORG dall'endpoint di analisi SQL. REORG è un comando di manutenzione di Spark SQL per le tabelle Delta.

Seguire le migliori pratiche

  • Eseguire PURGE solo quando si ha una necessità specifica, ad esempio i requisiti di conformità. OPTIMIZE elimina automaticamente i file a cui fanno riferimento più di 5% di record dai vettori di eliminazione, quindi la manutenzione di routine in genere non richiede un passaggio separato PURGE .
  • Segui il flusso di lavoro di pulizia della conformità quando hai bisogno che i dati cancellati vengano rimossi definitivamente da OneLake.
  • Usare WHERE i predicati per definire come destinazione partizioni specifiche quando non è necessario riscrivere la tabella completa.
  • Usa UPGRADE UNIFORM quando hai bisogno dei lettori Iceberg, ma tieni conto dei metadati aggiuntivi mantenuti da UniForm.
  • Trattare REORG e OPTIMIZE come operazioni di manutenzione complementari, non intercambiabili.