Zusammenführung mit geringem Shuffle in Azure Databricks

Delta Lake aktualisiert eine Tabelle, indem vollständige Datendateien neu geschrieben werden. Wenn ein MERGE-Befehl einige Zeilen in einer Datei aktualisiert oder löscht, muss er auch jede unveränderte Zeile in dieser Datei neu schreiben. Ohne Low-Shuffle Merge durchlaufen diese unmodifizierten Zeilen dieselben Shuffle-Phasen wie die modifizierten Zeilen. Dadurch wird MERGE langsamer und das bestehende Datenlayout durcheinandergebracht, sodass auch spätere Abfragen langsamer werden.

Low Shuffle Merge ist die optimierte Azure Databricks-Implementierung von MERGE. Es verarbeitet unveränderte Zeilen getrennt von modifizierten Zeilen, ohne Mischen oder andere teure Berechnungen. Dadurch werden MERGE viel weniger Daten gemischt und es läuft schneller.

Low Shuffle Merge ist standardmäßig aktiviert, sodass du deine MERGE Anweisungen nicht ändern musst, um davon zu profitieren. Am meisten hilft es, wenn MERGE eine relativ kleine Anzahl von Zeilen in einer großen Tabelle aktualisiert.

Datenlayout nach einer Zusammenführung

Die frühere MERGE Implementierung änderte das Datenlayout der unveränderten Daten vollständig, was die späteren Operationen verlangsamte. Low Shuffle Merge versucht, das bestehende Layout unveränderter Zeilen zu erhalten, einschließlich des Liquid-Clustering-Layouts. Dadurch verschlechtert sich die Leistung nach einem oder mehreren MERGE Befehlen langsamer, und man muss OPTIMIZE seltener ausführen.

Das Layout der aktualisierten oder neu eingefügten Zeilen ist möglicherweise nicht optimal. Möglicherweise musst du OPTIMIZE trotzdem auf Tabellen mit aktiviertem Liquid Clustering ausführen.

Für Tabellen, die Z-Ordnung verwenden, versucht das Low-Shuffle Merge auch, das bestehende Z-Order-Layout unveränderter Zeilen zu erhalten. Vielleicht musst du ORDER BY ZOPTIMIZE nach einem MERGE Vorgang trotzdem ausführen. Databricks empfiehlt die Verwendung von Flüssigclustering für alle neuen Tabellen.