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.
Wie Dateisysteme und relationale Datenbanken werden Daten im Laufe der Zeit fragmentiert, es sei denn, sie werden eng verwaltet, was zu übermäßigen Berechnungskosten zum Lesen der Daten führt. Delta Lake ist keine Ausnahme. Datendateien sollten regelmäßig in ein optimales Layout umgeschrieben werden, um einzelne Dateibetriebskosten zu reduzieren, die Datenkomprimierung zu verbessern und die Lese-Parallelität zu optimieren. Der OPTIMIZE Befehl behebt diese Herausforderung: Es gruppiert kleine Dateien innerhalb einer Partition in Bins, die auf eine ideale Dateigröße ausgerichtet sind, und schreibt sie in den Speicher um. Das Ergebnis sind die gleichen Daten, komprimiert in weniger Dateien.
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 g) | spark.databricks.delta.optimize.minFileSize |
| maxFileSize | Durch den Befehl OPTIMIZE erzeugte Zieldateigröße. |
1073741824 (1g) | spark.databricks.delta.optimize.maxFileSize |
Von Bedeutung
Während OPTIMIZE ein idempotenter Vorgang ist (d. h., dass bei zweimaliger Ausführung in Folge keine Daten überschrieben werden), könnte die Verwendung eines zu großen minFileSize im Verhältnis zur Größe der Delta-Tabelle zu einer Schreibverstärkung führen, wodurch der Vorgang unnötig rechenintensiver wird. Wenn beispielsweise minFileSize auf 1 GB festgelegt ist und Sie eine 900-MB-Datei in Ihrer Tabelle haben, wird diese vernünftig dimensionierte 900-MB-Datei neu geschrieben, wenn OPTIMIZE nach dem Schreiben einer kleinen 1-KB-Datei in Ihrer Tabelle ausgeführt wird. Anleitungen zum automatischen Verwalten der Dateigröße finden Sie in der Dokumentation zur adaptiven Zieldateigröße .
OPTIMIZE mit Z-Order
Wenn die ZORDER BY Klausel angegeben wird, werden alle aktiven Dateien von OPTIMIZE neu geschrieben. Dadurch werden Zeilen mit ähnlichen Werten für die Z-Reihenfolge-Spalten in denselben Dateien angeordnet, was die Effektivität des Dateiüberspringens für Abfragen verbessert, die nach diesen Spalten 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
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.
Schnelle Optimierung kann dazu führen, dass weniger Daten über einen Delta-Tabellenlebenszyklus umgeschrieben werden. Wie im folgenden Diagramm dargestellt, überspringt die schnelle Optimierung die Komprimierung suboptimaler Bins. Das Nettoergebnis ist schneller und mehr idempotente OPTIMIZE Aufträge und weniger Schreib-Amplifikation.
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. Das Festlegen von Zielen auf Dateiebene minimiert die Schreibverstärkung, da sich die Verdichtungszielgröße im Laufe der Zeit ändert (zum Beispiel durch die 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.
Legen Sie auf Sitzungsebene fest, um die automatische Komprimierung in neuen Tabellen zu aktivieren:
Legen Sie auf Tabellenebene fest, dass sie nur für ausgewählte Tabellen aktiviert werden soll:
CREATE TABLE dbo.table_name
TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')
Verwenden Sie die DataFrameWriter-Option, um sie in neuen Tabellen zu aktivieren:
df.write.option('delta.autoOptimize.autoCompact', 'true').saveAsTable('dbo.table_name')
Für vorhandene Tabellen aktivieren:
ALTER TABLE dbo.table_name
SET TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')
Das Verhalten der automatischen Komprimierung kann über die folgenden Spark-Sitzungskonfigurationen abgestimmt werden:
| 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 |
Hinweis
Microsoft empfiehlt, die automatische Komprimierung anstelle von Terminplanungsaufträgen OPTIMIZE zu verwenden. Die automatische Komprimierung übertrifft in der Regel geplante Komprimierungsaufträge bei der Maximierung der Lese-/Schreibleistung und beseitigt häufig den Wartungsaufwand für Codierung, Planung und Optimierung der Häufigkeit der Ausführung geplanter Aufträge. Die automatische Komprimierung wird empfohlen, wenn ziele der Datenverarbeitungsdienstebene die hinzugefügte Latenz von der automatischen Komprimierung tolerieren, die ausgelöst wird, wenn die Komprimierung erforderlich ist. Wenn die Anforderungen an die Datenlatenz streng sind, kann es effektiver sein, die Optimierung so zu planen, dass sie in einem separaten Spark-Pool ausgeführt wird, damit Schreibvorgänge keine regelmäßigen Leistungsspitzen erleben, die durch ausgelöste synchrone Komprimierungsvorgänge verursacht werden.
Von Bedeutung
Während die Komprimierung eine wichtige Strategie für die Verwendung ist, sollte sie auch angemessen mit der Vermeidung des Schreibens kleiner Dateien über Features wie Optimieren des Schreibvorgangs kombiniert werden. Weitere Informationen finden Sie in den Anleitungen zur Optimierung des Schreibvorgangs.
Wartung von Lakehouse-Tabellen
Benutzer können Ad-hoc-Wartungsvorgänge wie OPTIMIZE auf der Lakehouse-Benutzeroberfläche ausführen. Weitere Informationen finden Sie unter Seehaustischwartung.
Zusammenfassung der bewährten Methoden
-
Aktivieren Sie die automatische Komprimierung für Aufnahmepipelines mit häufigen kleinen Schreibvorgängen (Streaming oder Microbatch), um manuelle Planung zu vermeiden und Dateien automatisch zu komprimieren.
- Bei anderen Schreibmustern kann es vorteilhaft sein, dies als Versicherung gegen die Ansammlung kleiner Dateien zu nutzen. Überlegen Sie jedoch, ob Ihre Dienstgütezielen im Bereich der Datenverarbeitung regelmäßige Spitzen in der Verarbeitungszeit tolerieren.
- Planen Sie vollständige Tabellenoperationen
OPTIMIZEwährend Ruhezeiten, wenn Sie viele Partitionen neu schreiben oder Z-Order ausführen müssen. - Ermöglichen Sie schnelle Optimierung, um die Schreibverstärkung zu reduzieren und
OPTIMIZEidempotent zu machen. - Aktivieren Sie die Verdichtungsziele auf Dateiebene, um Schreibverstärkung zu vermeiden, wenn Tabellen größer werden und größere Zieldateigrößen verwendet werden.
- Denken Sie daran, dass die Prewrite-Komprimierung (Optimieren des Schreibvorgangs) weniger kostspielig ist als die Nachschreibkomprimierung (Optimieren). Informationen zu bewährten Methoden finden Sie unter "Optimieren der Schreibdokumentation ".