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 storage 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 (1 GB) | spark.databricks.delta.optimize.minFileSize |
| maxFileSize | Durch den Befehl OPTIMIZE erzeugte Zieldateigröße. |
1073741824 (1 GB) | spark.databricks.delta.optimize.maxFileSize |
OPTIMIZE ist idempotent, aber eine überdimensionierte minFileSize kann die Schreibverstärkung erhöhen. Wenn beispielsweise minFileSize auf 1 GB festgelegt ist, kann eine 900-MB-Datei nach einem kleinen zusätzlichen Schreibzugriff erneut 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. Die kolokierte Anordnung verbessert das Überspringen von Dateien bei selektiven Filtern. 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
Sie können Z-Reihenfolge und V-Reihenfolge in einem einzigen Befehl kombinieren. Spark wendet die Vorgänge in dieser Reihenfolge an: bin compaction → Z-Order → V-Order.
OPTIMIZE dbo.table_name ZORDER BY (column1, column2) VORDER
Das Verhalten der V-Reihenfolge während OPTIMIZE hängt davon ab, wie Sie den Befehl aufrufen:
| Aufruf | Behavior |
|---|---|
OPTIMIZE table VORDER |
Erzwingt die V-Reihenfolge bei umgeschriebenen Dateien, unabhängig von Sitzungs- oder Tabelleneinstellungen. |
OPTIMIZE table (kein VORDER Schlüsselwort) |
Übernimmt das V-Order-Verhalten von TBLPROPERTIES("delta.parquet.vorder.enabled"), falls es festgelegt ist; andernfalls wird auf die Sitzungskonfiguration spark.sql.parquet.vorder.default zurückgegriffen. |
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. Erhöhen Sie den Wert, um festzulegen, dass die Schnelloptimierung Bins konservativer überspringt, oder verringern Sie den Wert, 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 Bins, 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')
Reduzieren des Auswertungsaufwands
Ab Fabric Spark Runtime 2.0 (Delta 4.1) können Sie den automatischen Komprimierungsmodus onCheckpointOnly aktivieren. Standardmäßig wertet die automatische Komprimierung Dateimetadaten nach jedem Schreibvorgang aus, um zu bestimmen, ob eine Tabelle zu viele kleine Dateien enthält. Mit onCheckpointOnly wird die Auswertung auf Checkpoint-Vorgänge des Protokolls verschoben (typischerweise alle 10 Commits). Zum Zeitpunkt des Checkpoints ist der Snapshot der Tabelle bereits vollständig rekonstruiert, sodass die Auswertung auf Metadaten zugreift, die sich bereits im Speicher befinden, ohne einen zusätzlichen Scan zu erfordern. Die verzögerte Auswertung reduziert den Aufwand pro Commit, während gleichzeitig sichergestellt wird, dass Tabellen in regelmäßigen Abständen komprimiert werden.