Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
| 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.
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.
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.
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.
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:
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
OPTIMIZEwä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
OPTIMIZEidempotenter 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.