Ottimizzazione unione casuale bassa nelle tabelle Delta

Il comando Delta Lake MERGE consente agli utenti di aggiornare una tabella delta con condizioni avanzate. Può aggiornare i dati da una tabella di origine, una vista o un dataframe in una tabella di destinazione usando il MERGE comando . Tuttavia, l'algoritmo corrente non è completamente ottimizzato per la gestione delle righe non modificate . Con l'ottimizzazione unione casuale bassa, le righe non modificate vengono escluse da un'operazione di shuffling costosa necessaria per l'aggiornamento delle righe corrispondenti.

Note

L'unione casuale bassa è disponibile e abilitata per impostazione predefinita in tutti i runtime di Spark Fabric per migliorare notevolmente le prestazioni delle operazioni MERGE.

Perché è necessaria un'unione casuale bassa

Attualmente MERGE l'operazione viene eseguita da due esecuzioni di join. Il primo join usa l'intera tabella di destinazione e i dati di origine per trovare un elenco di file toccati della tabella di destinazione, incluse le righe corrispondenti. Successivamente, esegue il secondo join leggendo solo i file toccati e i dati di origine, per eseguire l'aggiornamento effettivo della tabella. Anche se il primo join consiste nel ridurre la quantità di dati per il secondo join, potrebbe essere ancora presente un numero elevato di righe non modificate nei file toccati . La prima query di join è più leggera perché legge solo le colonne nella condizione di corrispondenza specificata. Il secondo per l'aggiornamento della tabella deve caricare tutte le colonne, che comporta un processo di shuffling costoso.

Con l'ottimizzazione unione casuale bassa, Delta mantiene temporaneamente il risultato della riga corrispondente dal primo join e lo usa per il secondo join. In base al risultato, esclude le righe non modificate dal processo di shuffling elevato. Ci sarebbero due processi di scrittura separati per le righe corrispondenti e le righe non modificate , quindi potrebbe comportare un numero 2x di file di output rispetto al comportamento precedente. Tuttavia, il miglioramento delle prestazioni previsto supera il possibile problema di file di piccole dimensioni.

Vantaggi dell'unione casuale bassa

  • Le righe non modificate nei file toccati vengono gestite separatamente e non passano attraverso l'operazione MERGE effettiva. Consente di risparmiare il tempo di esecuzione MERGE complessivo e le risorse di calcolo. Il guadagno sarebbe maggiore quando vengono copiate molte righe e vengono aggiornate solo alcune righe.
  • Gli ordini di riga vengono mantenuti per le righe non modificate. Pertanto, i file di output di righe non modificate potrebbero essere comunque efficienti per ignorare i dati se il file è stato ordinato o Z-ORDERED.
  • Ci sarebbe un sovraccarico ridotto anche per il peggiore dei casi in cui la condizione MERGE corrisponde a tutte le righe nei file interessati.

Come abilitare e disabilitare l'unione casuale bassa

L'unione casuale ridotta è abilitata per impostazione predefinita come configurazione di sessione Spark:

SET spark.microsoft.delta.merge.lowShuffle.enabled = TRUE