Freigeben über


Komprimieren von Delta-Tabellen

Delta-Tabellendateien werden im Laufe der Zeit fragmentiert. Fragmentierung erhöht den Dateibetriebsaufwand, reduziert die Komprimierungseffizienz und kann die Leseparallelität einschränken. Die Komprimierung schreibt viele kleine Dateien in weniger dateien mit der rechten Größe um, sodass Spark Daten effizienter lesen und verarbeiten kann.

Der OPTIMIZE Befehl ist der primäre Komprimierungsvorgang. Es gruppiert kleine Dateien in Bins, die auf eine ideale Dateigröße abzielen, und schreibt sie dann in den Speicher um.

Anleitungen zu Komprimierungsstrategien für SQL Analytics-Endpoint, Power BI Direct Lake und Spark im Rahmen von Cross-Workload-Szenarien finden Sie unter Cross-Workload-Tabellenwartung und -optimierung.

Komprimierungsmethoden

Microsoft Fabric bietet mehrere Ansätze, um optimale Dateigrößen in Delta-Tabellen beizubehalten:

OPTIMIZE-Befehl

Der OPTIMIZE Befehl ist der grundlegende Vorgang zum Komprimieren von Delta-Tabellen. Es schreibt kleine Dateien in größere Dateien um, um das Datenlayout in Delta-Tabellen zu verbessern.

OPTIMIZE dbo.table_name
Eigentum Description Standardwert Sitzungskonfiguration
minFileSize Dateien, die kleiner als dieser Schwellenwert sind, werden gruppiert und als größere Dateien umgeschrieben. 1073741824 (1g) spark.databricks.delta.optimize.minFileSize
maxFileSize Durch den Befehl OPTIMIZE erzeugte Zieldateigröße. 1073741824 (1g) spark.databricks.delta.optimize.maxFileSize

OPTIMIZE ist idempotent, aber eine überdimensionierte minFileSize kann die Schreibverstärkung erhöhen. Beispielsweise, wenn minFileSize auf 1 GB festgelegt ist, kann eine 900 MB-Datei nach einem kleinen zusätzlichen Schreibvorgang neu geschrieben werden. Anleitungen zur automatischen Verwaltung von Dateigrößen finden Sie unter adaptive Zieldateigröße.

OPTIMIZE mit Z-Order

Wenn Sie die ZORDER BY-Klausel verwenden, schreibt OPTIMIZE aktive Dateien neu, damit Zeilen mit ähnlichen Werten in denselben Dateien platziert werden. Dadurch wird das Überspringen von Dateien für selektive Filter verbessert. Verwenden Sie Z-Reihenfolge, wenn:

  • Ihre Abfragen filtern häufig nach zwei oder mehr Spalten (z. B. Datum + customer_id) und
  • Diese Prädikate sind selektiv genug, damit das Überspringen auf Dateiebene die Anzahl der gescannten Dateien reduziert.
OPTIMIZE dbo.table_name ZORDER BY (column1, column2)

OPTIMIZE mit V-Order

Die VORDER Klausel bewirkt, dass auf die Dateien, die zur Komprimierung vorgesehen sind, die V-Order-Optimierung angewendet wird. Weitere Informationen zur V-Bestellung finden Sie in der detaillierten Dokumentation.

OPTIMIZE dbo.table_name VORDER

OPTIMIZE mit flüssiger Clusterung

Liquid Clustering wird als Tabellenoption angegeben; Details finden Sie unter "Aktivieren von Flüssigclustering". Wenn die Liquid-Clustering-Funktion aktiviert ist, führt OPTIMIZE die physische Neuschreibung durch, die die Clusteringrichtlinie anwendet.

Von Bedeutung

Daten werden nur gruppiert, wenn OPTIMIZE auf Tabellen mit aktiviertem Liquid Cluster ausgeführt wird. Reguläre Schreibvorgänge gruppieren die Daten NICHT. Eine Komprimierungsstrategie wie die Verwendung der automatischen Komprimierung oder die manuelle Planung von Optimierungsaufträgen ist wichtig, um sicherzustellen, dass die Vorteile von gruppierten Daten (d. h. verbessertes Überspringen von Delta-Dateien) realisiert werden können.

Schnelle Optimierung

Schnelle Optimierung analysiert Delta-Tabellendateien intelligent und überspringt Komprimierungsvorgänge, die wahrscheinlich die Leistung nicht sinnvoll verbessern.

Anstatt Dateien blind zu komprimieren, wenn kleine Dateien vorhanden sind, wird schnell optimiert, ob jeder Kandidatenbehälter (Gruppe kleiner Dateien) die konfigurierbaren Ziele gemäß bewährten Kompaktierungspraktiken erfüllt. Fast Optimize führt nur eine Verdichtung bei einer Gruppe von Dateien durch, wenn das Zusammenführen wahrscheinlich Ihre minimale Zielgröße erreicht oder zu viele kleine Dateien vorhanden sind. Andernfalls wird diese Gruppe übersprungen oder die Anzahl der Dateien, die zusammengefasst werden, reduziert.

SET spark.microsoft.delta.optimize.fast.enabled = TRUE

Die schnelle Optimierung kann basierend auf Ihren Erwartungen an die Datenkomprimierung fein abgestimmt werden.

Eigentum Description Standardwert Sitzungskonfiguration
minNumFiles Die Anzahl kleiner Dateien, die in einem Bin vorhanden sein müssen, damit die Optimierung durchgeführt werden kann, falls der Bin nicht genügend Daten enthält, die als ausreichend zur Erstellung einer komprimierten Datei eingeschätzt werden. 50 spark.microsoft.delta.optimize.fast.minNumFiles
ParquetCoefficient Multipliziert mit der minimalen Dateigröße im Optimierungskontext, um die minimale Menge an Daten kleiner Dateien zu ermitteln, die in einem Bin vorhanden sein müssen, damit dieser für die Komprimierung einbezogen wird. 1.3 spark.microsoft.delta.optimize.fast.parquetCoefficient

Hinweis

Dies parquetCoefficient führt dazu, dass die Zielgröße eines Bins größer als die minimale Zieldateigröße des Optimierungskontexts ist. Dieser Koeffizienten macht die Realität aus, dass die Kombination mehrerer kleiner Parkettdateien zu einer besseren Komprimierung und damit weniger Daten als die Summe kleiner Dateien führt. Dieser Wert kann erhöht werden, um vorsichtiger zu sein, wie oft die schnelle Optimierung Bins überspringt, oder verringert werden, um ein großzügigeres Überspringen von Bins zu ermöglichen.

Funktionsweise

Schnelle Optimierung führt zusätzliche Prüfungen ein, bevor Container komprimiert werden. Für jeden Kandidatencontainer bewertet die schnelle Optimierung Folgendes:

  • Die geschätzte Menge an Rohdaten im Bin (Summe kleiner Dateigrößen)
  • Gibt an, ob die Kombination der kleinen Dateien geschätzt wird, um eine Datei zu erstellen, die die konfigurierte Mindestzielgröße erfüllt.
  • Gibt an, ob der Bin mindestens die konfigurierte Mindestanzahl kleiner Dateien enthält.

Schnelle Optimierung wertet jeden Bin kleiner Dateien aus und komprimiert nur die kleinen Dateien, die wahrscheinlich die minimale Zielgröße erreichen oder die minimale Dateianzahl überschreiten. Bins, die diese Schwellenwerte nicht erfüllen, werden übersprungen oder teilweise komprimiert. Das Überspringen suboptimaler Bins reduziert unnötige Neuschreibungen, verringert die Schreibverstärkung und macht OPTIMIZE-Aufträge mehr idempotent.

Screenshot, das zeigt, wie schnell Fast Optimize auswertet, ob ein Container kompakt ist.

Hinweis

Die genaue Implementierung unterliegt im Laufe der Zeit einer Weiterentwicklung.

Fast Optimize kann die neu geschriebenen Daten über einen Delta-Tabellenlebenszyklus reduzieren. Wie im folgenden Diagramm gezeigt, überspringt die schnelle Optimierung die suboptimalen Bins, was zu schnelleren und idempotenteren OPTIMIZE Prozessen mit weniger Schreibverstärkung führt.

Screenshot, der zeigt, wie schnelle Optimierungsergebnisse über die Zeit zu weniger Datenneuschreibungen führen.

Hinweis

Die obigen Diagramme gehen nur aus Veranschaulichungszwecken davon aus, dass die Größe der aus Komprimierung geschriebenen Datei die Summe der Größe kleiner Dateien ist. Sie impliziert auch eine parquetCoefficient von 1.

Einschränkungen
  • Nicht anwendbar auf Flüssigclustering- und Z-Order-Vorgänge
  • Schnelle Optimierung ändert das Verhalten der automatischen Komprimierung nicht

Komprimierungsziele auf Dateiebene

Um das Neuschreiben von Daten zu vermeiden, die zuvor als komprimiert (groß genug) betrachtet wurden, basierend auf dem Ändern von Komprimierungs-Min- und max.-Dateigrößenzielen, können aktiviert werden, spark.microsoft.delta.optimize.fileLevelTarget.enabled um eine erneute Compaction von bereits komprimierten Dateien zu verhindern. Wenn diese Option aktiviert ist, werden Dateien nicht erneut kompagiert, wenn sie zuvor mindestens die Hälfte der Zieldateigröße zum Zeitpunkt der Komprimierung erreicht haben. Die Verwaltung von Zielen auf Dateiebene minimiert die Schreibverstärkung, da sich die Größe der Komprimierungsziele im Laufe der Zeit ändert (z. B. durch Bewertung und Festlegung eines größeren Ziels). Wenn diese Option aktiviert ist, wird das OPTIMIZE_TARGET_SIZE Tag neuen Dateien hinzugefügt, wenn OPTIMIZE ausgeführt wird oder bei einem Schreibvorgang, wenn die Tabelleneigenschaft delta.targetFileSize oder delta.targetFileSize.adaptive festgelegt ist.

Hinweis

Obwohl nicht standardmäßig aktiviert, empfiehlt Microsoft die Aktivierung von Komprimierungszielen auf Dateiebene, um eine potenzielle Schreibverstärkung zu begrenzen.

SET spark.microsoft.delta.optimize.fileLevelTarget.enabled = TRUE

Automatische Komprimierung

Die automatische Komprimierung wertet den Partitionsstatus nach jedem Schreibvorgang aus. Wenn eine übermäßige Dateifragmentierung (zu viele kleine Dateien) innerhalb einer Partition erkannt wird, löst sie einen synchronen OPTIMIZE Vorgang unmittelbar nach dem Commit des Schreibvorgangs aus. Dieser writer-gesteuerte Ansatz zur Dateiwartung ist optimal, da die Komprimierung nur ausgeführt wird, wenn programmgesteuert festgestellt wird, dass sie von Vorteil ist.

Aktivieren auf Sitzungsebene

Legen Sie spark.databricks.delta.autoCompact.enabled auf Sitzungsebene fest, um die automatische Komprimierung für neue Tabellen zu aktivieren, die in dieser Spark-Sitzung erstellt wurden:

SET spark.databricks.delta.autoCompact.enabled = TRUE

Auf Tabellenebene aktivieren

Legen Sie die Tabelleneigenschaft delta.autoOptimize.autoCompact fest, um die automatische Komprimierung für bestimmte Tabellen zu aktivieren:

CREATE TABLE dbo.table_name
TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')

Verwenden Sie die DataFrameWriter-Option delta.autoOptimize.autoCompact , um die automatische Komprimierung beim Erstellen einer Tabelle zu aktivieren:

df.write.option('delta.autoOptimize.autoCompact', 'true').saveAsTable('dbo.table_name')

Aktivieren Sie dieselbe Tabelleneigenschaft für eine vorhandene Tabelle:

ALTER TABLE dbo.table_name
SET TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')

Optimieren von Schwellenwerten für die automatische Komprimierung

Optimieren Sie das Verhalten der automatischen Komprimierung, indem Sie diese Spark-Sitzungskonfigurationen festlegen:

Eigentum Description Standardwert Sitzungskonfiguration
maxFileSize Die maximale Dateigröße des Ziels in Byte für komprimierte Dateien. 134217728b (128 MB) spark.databricks.delta.autoCompact.maxFileSize
minFileSize Die mindeste Dateigröße in Bytes, damit eine Datei als komprimiert betrachtet wird. Alles, was unter diesem Schwellenwert liegt, wird zur Komprimierung in Betracht gezogen und zum minNumFiles Schwellenwert addiert. Standardmäßig nicht festgelegt, berechnet als 1/2 des maxFileSize Werts, es sei denn, Sie legen einen Wert explizit fest. spark.databricks.delta.autoCompact.minFileSize
minNumFiles Die mindeste Anzahl von Dateien, die unter dem minFileSize Schwellenwert für die automatische Komprimierung vorhanden sein müssen, um ausgelöst zu werden. 50 spark.databricks.delta.autoCompact.minNumFiles

Wählen Sie zwischen automatischer Komprimierung und geplanter OPTIMIERUNG

Microsoft empfiehlt die automatische Komprimierung als Standardstrategie für die meisten Aufnahmeworkloads. Es übertrifft in der Regel feste Zeitpläne und reduziert den betrieblichen Aufwand für die Pflege von OPTIMIZE-Aufträgen.

Wenn Ihre Latenzziele streng sind, kann die Planung OPTIMIZE in einem separaten Spark-Pool besser geeignet sein, da die automatische Komprimierung synchron nach Schreibvorgängen ausgeführt wird.

Verwenden Sie die Komprimierung zusammen mit Features zur Verhinderung kleiner Dateien, z. B. zum Optimieren des Schreibvorgangs. Anleitungen finden Sie unter Optimieren des Schreibvorgangs.

Wartung von Lakehouse-Tabellen

Sie können Ad-hoc-Wartungsvorgänge ausführen, zum Beispiel OPTIMIZE, aus dem Lakehouse Explorer. Weitere Informationen finden Sie unter Lakehouse-Tabellenwartung.

Zusammenfassung der bewährten Methoden

Verwenden Sie diese Empfehlungen, um Schreibkosten, Leseleistung und Wartungsaufwand für die Delta-Tabellenkomprimierung auszugleichen.

  • Aktivieren Sie die automatische Komprimierung für Aufnahmepipelines mit häufigen kleinen Schreibvorgängen (Streaming oder Microbatch), um die manuelle Planung zu reduzieren.
  • Verwenden Sie die automatische Komprimierung selektiv für andere Schreibmuster , wenn Ihre Ziele auf Dienstebene gelegentlich Schreiblatenzspitzen tolerieren können.
  • Planen Sie die vollständige Tabelle OPTIMIZE während ruhiger Fenster , wenn Sie viele Partitionen neu schreiben oder Z-Order anwenden müssen.
  • Aktivieren Sie die Schnelloptimierung, um die Schreibverstärkung zu reduzieren und OPTIMIZE idempotenter zu machen.
  • Aktivieren Sie die Komprimierungsziele auf Dateiebene , um unnötige Neukompilierung zu reduzieren, da die Zieldateigrößen im Laufe der Zeit steigen.
  • Verwenden Sie das Optimieren des Schreibens in geeigneten Aufnahmepfaden , da die Verdichtung vor dem Schreiben häufig weniger kostspielig ist als die Verdichtung nach dem Schreiben. Anleitungen finden Sie unter Optimieren des Schreibvorgangs.