Freigeben über


Anpassen der Größe von Delta-Tabellendatendateien

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.

Screenshot, der zeigt, wie die Optimierung der Schreibergebnisse dazu führt, dass weniger Dateien geschrieben werden.

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, UPDATEund DELETE)

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.

  1. Optimierung für Schreiben deaktivieren

    spark.conf.unset("spark.databricks.delta.optimizeWrite.enabled")
    
  2. 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:

SET spark.microsoft.delta.optimizeWrite.partitioned.enabled = TRUE

Ü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:

SET spark.microsoft.delta.targetFileSize.adaptive.enabled = TRUE

Wenn diese Option aktiviert ist, wird die Größe der adaptiven Zieldatei ausgewertet und in den folgenden Szenarien festgelegt:

  • CREATE TABLE AS SELECT und CREATE OR REPLACE TABLE AS SELECT Operationen
  • Überschreibt Schreibvorgänge (z. B. DataFrame.write.mode("overwrite") oder INSERT OVERWRITE)
  • Schreibt beim Erstellen einer neuen Tabelle im ErrorIfExists-, Append- oder Ignore-Modus.
  • Am Anfang des OPTIMIZE Befehls

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.

Diagramm zur Veranschaulichung der Beziehung zwischen Tabellengröße und optimaler Parquet-Dateigröße.

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: MERGE und UPDATE Vorgä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 OPTIMIZE wä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.targetFileSize oder 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.