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.
Dateien mit geeigneter Größe sind wichtig für die Abfrageleistung, ressourcenauslastung und Die Metadatenverwaltung. Kleinere Dateien erhöhen den Aufgabenaufwand und Metadatenoperationen, während größere Dateien die Parallelität nicht vollständig nutzen und E/A belasten können. Delta Lake verwendet Dateimetadaten zum Löschen von Partitionen und Zum Überspringen von Daten, sodass durch die Ausrichtung auf die richtige Dateigröße effiziente Lese-, Schreib- und Wartungsvorgänge sichergestellt werden.
Im folgenden Abschnitt wird gezeigt, wie Sie verschiedene Funktionen zur Anpassung der Dateigröße verwenden, um die Leistung Ihrer Delta-Tabellen zu verbessern.
Anpassbare Datenanordnungsvorgänge
Optimieren
Der OPTIMIZE Befehl schreibt kleine Dateien als größere Dateien um, um das Layout von Daten in Delta-Tabellen zu verbessern. Weitere Details einschließlich Optimierungsinformationen zur Dateigröße erhalten Sie in der OPTIMIZE-Befehlsdokumentation .
Automatische Komprimierung
Die automatische Komprimierung wertet die Partitionsintegrität nach jedem Schreibvorgang automatisch 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 im Allgemeinen optimal, da die Komprimierung nur ausgeführt wird, wenn programmgesteuert festgestellt wird, dass sie von Vorteil ist. Ausführliche Konfigurationsoptionen und zusätzliche Informationen finden Sie in der Dokumentation zur automatischen Komprimierung .
Optimieren des Schreibvorgangs
Durch die Optimierung des Schreibvorgangs wird der Aufwand für kleine Dateien reduziert, indem eine Vorschreibkomprimierung (Bin-Packung) durchgeführt wird, wodurch weniger, größere Dateien generiert werden. Mit diesem Ansatz werden speicherinterne Daten in optimal dimensionierte Container sortiert, bevor Spark die Parquet-Dateien schreibt, wodurch das Potenzial für die Generierung entsprechend angepasster Dateien maximiert wird, ohne dass sofort nach dem Schreiben Bereinigungsoperationen erforderlich sind.
Die Verwendung von "Optimize write" sollte mit Vorsicht erfolgen, da die Rechenkosten für das Shuffling von Daten in bestimmten Schreibszenarien übermäßige und unnötige Verarbeitungszeit verursachen können. Die Optimierung des Schreibvorgangs ist vorteilhaft, wenn ein Schreibvorgang andernfalls kleine Dateien erzeugen würde, die später zur Komprimierung geeignet wären.
Das Optimieren von Schreibvorgängen ist in der Regel von Vorteil für:
- Partitionierte Tabellen
- Tabellen mit häufigen kleinen Einfügungen
- Vorgänge, die wahrscheinlich viele Dateien berühren (
MERGE,UPDATEundDELETE)
Bei selektiver Anwendung auf bestimmten Tabellen deaktivieren Sie die Sitzungskonfiguration, und aktivieren Sie die Tabelleneigenschaft einzeln. Wenn Sie die Konfiguration auf Sitzungsebene aufheben, können sich Spark-Sitzungen bei jeder Tabelle darauf verlassen, ob die Schreiboptimierung angewendet werden soll.
Optimierung für Schreiben deaktivieren
spark.conf.unset("spark.databricks.delta.optimizeWrite.enabled")Aktivieren in einer einzelnen Tabelle
ALTER TABLE dbo.table_name SET TBLPROPERTIES ('delta.autoOptimize.optimizeWrite' = 'true')
Um Schreibvorgänge in alle partitionierten Tabellen in der Spark-Sitzung zu aktivieren, stellen Sie sicher, dass die Sitzungskonfiguration nicht festgelegt ist, und aktivieren Sie dann die Sitzungskonfiguration spark.microsoft.delta.optimizeWrite.partitioned.enabled:
Über die spark.databricks.delta.optimizeWrite.binSize Konfiguration kann die durch die Optimierung generierte Dateigröße angepasst werden.
Hinweis
Siehe Ressourcenprofile für die Standardoptimierung von Schreibeinstellungen nach Ressourcenprofil.
Konsistentes Festlegen der Zieldateigröße
Um zu vermeiden, dass die Sitzungskonfiguration für mindest- und maximale Zieldateigröße für optimierung, automatische Komprimierung und Schreibvorgänge festgelegt werden muss, stellt Microsoft Fabric die delta.targetFileSize Tabelleneigenschaft als Möglichkeit bereit, alle zugehörigen Datenlayoutkonfigurationen auf Tabellenebene zu vereinheitlichen. Der Wert für die Zieldateigröße wird als Byte-Zeichenfolge eingegeben (z. B. 1073741824b, 1048576k, 1024m, 1g). Wenn angegeben, hat sie Vorrang vor allen anderen Sitzungskonfigurationen und der Dateigröße des adaptiven Ziels.
ALTER TABLE dbo.table_name
SET TBLPROPERTIES ('delta.targetFileSize' = '256m')
Größe der adaptiven Zieldatei
Microsoft Fabric bietet adaptive Zieldateigröße, um die Komplexität im Zusammenhang mit der manuellen Optimierung der Zieldateigröße aller Tabellen in einer Sitzung oder einzelnen Tabellen über die delta.targetFileSize Tabelleneigenschaft zu vermeiden. Die Größe der adaptiven Zieldatei verwendet Delta-Tabellen heuristiken wie z. B. die Tabellengröße, um die ideale Zieldatei zu schätzen und das Ziel automatisch zu aktualisieren, wenn sich die Bedingungen ändern, um eine optimale Leistung ohne manuelle Eingriffe oder Wartungsaufwand sicherzustellen.
Hinweis
Microsoft empfiehlt zwar, die Sitzungskonfiguration für adaptive Zieldateigröße zu aktivieren, während sie zurzeit nicht standardmäßig aktiviert ist.
Aktivieren Sie die Größe der adaptiven Zieldatei für Tabellen, die in einer Spark-Sitzung erstellt oder geändert wurden, indem Sie die folgende Spark-Sitzungskonfiguration festlegen:
Wenn diese Option aktiviert ist, wird die Größe der adaptiven Zieldatei ausgewertet und in den folgenden Szenarien festgelegt:
-
CREATE TABLE AS SELECTundCREATE OR REPLACE TABLE AS SELECTOperationen - Überschreibt Schreibvorgänge (z. B.
DataFrame.write.mode("overwrite")oderINSERT OVERWRITE) - Schreibt beim Erstellen einer neuen Tabelle im
ErrorIfExists-,Append- oderIgnore-Modus. - Am Anfang des
OPTIMIZEBefehls
Nach der Festlegung wird die ideale Größe zu Beginn jedes OPTIMIZE Vorgangs erneut ausgewertet, um sicherzustellen, dass aktuelle Heuristiken die neueste Datenverteilung und Tabellenwachstum widerspiegeln. Durch diesen adaptiven Ansatz wird die Zieldatei im Laufe der Zeit automatisch aktualisiert, wodurch die Notwendigkeit für manuelle Anpassungen entfällt und die Abfrage- und Schreibleistung erhalten bleibt, während Ihre Daten wachsen. Wenn Sie eine bestimmte Größe sperren müssen, z. B. in Hyperoptimierungs- oder Testanwendungsfällen, können Sie die adaptive Einstellung außer Kraft setzen, indem Sie die benutzerdefinierte delta.targetFileSize Tabelleneigenschaft explizit festlegen.
Der ausgewertete Wert für die Größe der adaptiven Zieldatei kann durch Ausführen DESCRIBE DETAIL oder DESCRIBE EXTENDED in der Tabelle überwacht werden. Die adaptive ausgewertete Größe wird als Bytezeichenfolge in der Tabelleneigenschaft delta.targetFileSize.adaptivegespeichert. Dieser Wert wird als Max- oder Zielgrößenkonfiguration zum Optimieren, automatischen Komprimieren und Optimieren des Schreibvorgangs verwendet. Der von den entsprechenden Konfigurationen verwendete Mindestwert wird als die Hälfte von delta.targetFileSize.adaptive berechnet.
Die Größe der adaptiven Zieldatei kann mithilfe der folgenden Spark-Sitzungskonfigurationen weiter konfiguriert werden:
| Eigentum | Description | Standardwert | Sitzungskonfiguration |
|---|---|---|---|
| minFileSize | Gibt die minimale Dateigröße (untere Grenze) als Bytezeichenfolge an, die bei der Auswertung von adaptiven Zieldateigrößen verwendet wird. Muss zwischen 128 MB und 1 GB betragen. | 128m | spark.microsoft.delta.targetFileSize.adaptive.minFileSize |
| maxFileSize | Gibt die maximale Dateigröße (obere Grenze) als Bytezeichenfolge an, die bei der Auswertung von adaptiven Zieldateigrößen verwendet wird. Muss zwischen 128 MB und 1 GB betragen. | 1024m | spark.microsoft.delta.targetFileSize.adaptive.maxFileSize |
| stopAtMaxSize | Wenn true aktiviert ist, werden weitere Größenauswertungen gestoppt, sobald die berechnete Zieldateigröße maxFileSize erreicht, was den Evaluierungsaufwand für sehr große Tabellen reduziert. |
Wahr | spark.microsoft.delta.targetFileSize.adaptive.stopAtMaxSize |
Hinweis
Bei stopAtMaxSize aktivierter (Standardeinstellung) bleibt die adaptive Zielgröße beim erreichenden Maximalwert fest, sodass zusätzliche Berechnungen vermieden werden. Wenn Ihre Tabellen nach dem Anwachsen möglicherweise verkleinert werden, legen Sie diese Eigenschaft auf false fest, damit die Neuberechnung unterhalb des maximalen Schwellenwerts zulässig ist.
Das folgende Diagramm veranschaulicht die Beziehung zwischen der Tabellengröße und der optimalen Parquet-Datei-Größe. Bei Tabellen unter 10 GB wertet die Fabric Spark Runtime die Zieldateigröße auf 128 MB aus. Wenn die Tabellengröße wächst, wird die Zieldatei linear skaliert und erreicht bis zu 1 GB für Tabellen, die 10 TB überschreiten.
Indem man mit 128 MB anfängt und die Größe der Parquet-Dateien dann skaliert, wenn eine Tabelle größer wird, hat vielfältige Vorteile:
Verbessertes Überspringen von Delta-Dateien: Dateien mit richtiger Größe unterstützen optimale Datenclustering und Überspringen, sodass das Protokoll zum Überspringen von Delta-Dateien während der Abfrageausführung irrelevantere Dateien beseitigen kann. Eine Tabelle mit Dateien von 128 MB statt 1 GB ermöglicht das achtfache Überspringen von Dateien.
Reduzierte Updatekosten:
MERGEundUPDATEVorgänge schreiben nur betroffene Dateien neu. Dateien mit der rechten Größe minimieren die Anzahl der pro Vorgang berührten Dateien, wodurch die Menge der neu geschriebenen Daten reduziert wird. Mit aktivierten Löschvektoren wird die ordnungsgemäße Dateigröße kritisch: Tombstones auf Zeilenebene in überdimensionierten Dateien führen zu erheblichen Bereinigungskosten bei Komprimierungs- oder Bereinigungsvorgängen.Optimierte Parallelität: Dateien mit der richtigen Größe ermöglichen Spark, eine ideale Task-Parallelität zu erzielen. Zu viele kleine Dateien überwältigen den Zeitplan; zu wenige große Dateien unterlasten Ihren Spark-Pool. Optimale Größenanpassung maximiert den Lese- und Schreibdurchsatz.
Die Größe der adaptiven Zieldatei kann die Komprimierungsleistung um 30 bis 60% verbessern und schnellere Abfragen und Schreibvorgänge bereitstellen, wenn sie eine optimale Dateigröße als die Standardeinstellung auswählt. Wenn die adaptive Auswertung die gleiche Größe wie die Standardkonfiguration der Spark-Sitzung liefert, gibt es keine erwartete Leistungsverbesserung.
Von Bedeutung
Um die Schreibverstärkung zu vermeiden , bei der bereits komprimierte Dateien neu geschrieben werden, wenn die Größe der adaptiven Zieldatei beim Wächst der Tabelle zunimmt– aktivieren Sie Die Komprimierungsziele auf Dateiebene. Dieses Feature verhindert, dass Dateien, die unter früheren adaptiven Zielgrößen komprimiert wurden, unnötig erneut komprimiert werden. Weitere Informationen finden Sie in der Dokumentation zu Komprimierungszielen auf Dateiebene.
Zusammenfassung der bewährten Methoden
-
Aktivieren Sie die automatische Komprimierung für Aufnahmepipelines mit häufigen kleinen Schreibvorgängen (Streaming oder Mikrobatch), um manuelle Planung zu vermeiden und Dateien automatisch komprimiert zu halten.
- Es kann vorteilhaft sein, die Funktion bei anderen Schreibmustern zu aktivieren, um der Akkumulation kleiner Dateien vorzubeugen. Jedoch sollten Sie abwägen, ob Ihre Service-Level-Ziele für die Datenverarbeitung regelmäßige Spitzenzeiten bei der Verarbeitungszeit tolerieren.
- Aktivieren Sie die adaptive Zieldateigröße, um das Rätselraten bezüglich optimaler Zieldateigrößen zu vermeiden.
- Verwenden Sie "Schreiben optimieren" in kontrollierten Aufnahmepfaden (Batchaufträge, die ein Shuffle, Partitionierungsszenarien oder häufige kleine Schreiboperationen tolerieren können), um die Erstellung kleiner Dateien und nachgelagerte Wartungskosten zu reduzieren. Die Pre-Write-Komprimierung (Optimieren des Schreibvorgangs) ist tendenziell weniger kostspielig als die Nachschreibkomprimierung (Optimieren).
- Planen Sie vollständige Tabellenvorgänge
OPTIMIZEwährend ruhigen Phasen, wenn Sie viele Partitionen neu schreiben oder Z-Order ausführen müssen. - Aktivieren Sie schnelle Optimierung , um die Schreibverstärkung zu minimieren und idempotent zu machen
OPTIMIZE(siehe schnelle Optimierung). - Verwenden Sie entweder
delta.targetFileSizeoder vorzugsweise adaptive Zieldateigröße, um die Zieldateigrößen für Datenlayout-Features und Spark-Sitzungen konsistent zu halten. - Aktivieren Sie die Verdichtungsziele auf Dateiebene, um Schreibverstärkung zu vermeiden, wenn Tabellen größer werden und größere Zieldateigrößen verwendet werden.