Konfigurieren von Delta Lake zum Steuern der Datendateigröße

Delta Lake bietet Optionen zum manuellen oder automatischen Konfigurieren der Zieldateigröße für Schreibvorgänge und Vorgänge vom Typ OPTIMIZE. Azure Databricks stimmt viele dieser Einstellungen automatisch ab und aktiviert Features, die die Tabellenleistung automatisch verbessern, indem sie nach Dateien mit der richtigen Größe suchen.

Hinweis

In Databricks Runtime 13.3 und höher empfiehlt Databricks die Verwendung von Clustering für das Delta-Tabellenlayout. Weitere Informationen finden Sie unter Verwenden von Liquid Clustering für Delta-Tabellen.

Databricks empfiehlt die Verwendung der prädiktiven Optimierung, um OPTIMIZE und VACUUM automatisch für Deltatabellen auszuführen. Weitere Informationen finden Sie unter Prädiktive Optimierung für Delta Lake.

In Databricks Runtime 10.4 LTS und höher sind die automatische Komprimierung und optimierte Schreibvorgänge für MERGE-, UPDATE- und DELETE-Vorgänge immer aktiviert. Sie können diese Funktion nicht deaktivieren.

Sofern nicht anders angegeben, gelten alle Empfehlungen in diesem Artikel nicht für verwaltete Unity Catalog-Tabellen, in denen die neuesten Laufzeiten ausgeführt werden.

Für verwaltete Unity Catalog-Tabellen stimmt Databricks die meisten dieser Konfigurationen automatisch ab, wenn Sie ein SQL-Warehouse oder Databricks Runtime 11.3 LTS oder höher verwenden.

Wenn Sie eine Workload von Databricks Runtime 10.4 LTS oder früher aktualisieren, lesen Sie Upgrade auf die automatische Komprimierung im Hintergrund.

Ausführung von OPTIMIZE

Automatische Komprimierung und optimierte Schreibvorgänge reduzieren jeweils kleine Dateiprobleme, sind jedoch kein vollständiger Ersatz für OPTIMIZE. Insbesondere für Tabellen, die größer als 1 TB sind, empfiehlt Databricks die Ausführung von OPTIMIZE nach einem Zeitplan, um Dateien weiter zu konsolidieren. Azure Databricks führt nicht automatisch ZORDER für Tabellen aus, sodass Sie OPTIMIZE mit ZORDER ausführen müssen, um das erweiterte Überspringen von Daten zu aktivieren. Siehe Überspringen von Daten für Delta Lake.

Was ist die tomatische Optimierung in Azure Databricks?

Der Begriff automatische Optimierung wird zuweilen verwendet, um Funktionen zu beschreiben, die durch die Einstellungen delta.autoOptimize.autoCompact und delta.autoOptimize.optimizeWrite gesteuert werden. Dieser Begriff wurde eingestellt, um jede Einstellung einzeln zu beschreiben. Weitere Informationen finden Sie unter Automatische Komprimierung für Delta Lake in Azure Databricks und Optimierte Schreibvorgänge für Delta Lake in Azure Databricks.

Automatische Komprimierung für Delta Lake in Azure Databricks

Bei der automatischen Komprimierung werden kleine Dateien in Delta-Tabellenpartitionen kombiniert, sodass kleine Dateiprobleme automatisch reduzier werden. Die automatische Komprimierung tritt auf, nachdem ein Schreibvorgang in eine Tabelle erfolgreich war, und wird synchron auf dem Cluster ausgeführt, der den Schreibvorgang ausgeführt hat. Bei der automatischen Komprimierung werden nur Dateien komprimiert, die zuvor noch nicht komprimiert wurden.

Sie können die Größe der Ausgabedatei steuern, indem Sie die Spark-Konfigurationspark.databricks.delta.autoCompact.maxFileSize festlegen. Databricks empfiehlt die Verwendung von Autotuning basierend auf der Workload- oder Tabellengröße. Weitere Informationen finden Sie unter Automatische Abstimmung der Dateigröße basierend auf dem Workload und Automatische Abstimmung der Dateigröße basierend auf der Tabellengröße.

Die automatische Komprimierung wird nur für Partitionen oder Tabellen ausgelöst, die mindestens eine bestimmte Anzahl kleiner Dateien enthalten. Sie können optional die Mindestanzahl der Dateien ändern, die zum Auslösen der automatischen Komprimierung erforderlich sind, indem Sie spark.databricks.delta.autoCompact.minNumFiles festlegen.

Die automatische Komprimierung kann auf Tabellen- oder Sitzungsebene mit den folgenden Einstellungen aktiviert werden:

  • Tabelleneigenschaft: delta.autoOptimize.autoCompact
  • SparkSession-Einstellung: spark.databricks.delta.autoCompact.enabled

Bei diesen Einstellungen sind die folgenden Optionen möglich:

Optionen Verhalten
auto (empfohlen) Stimmt die Zieldateigröße unter Berücksichtigung anderer Autotuning-Funktionen ab. Erfordert Databricks Runtime 10.4 LTS oder höher.
legacy Alias für true. Erfordert Databricks Runtime 10.4 LTS oder höher.
true Verwenden Sie 128 MB als Zieldateigröße. Keine dynamische Größenanpassung.
false Deaktiviert die automatische Komprimierung. Kann auf Sitzungsebene festgelegt werden, um die automatische Komprimierung für alle Delta-Tabellen außer Kraft zu setzen, die im Workload geändert wurden.

Wichtig

Wenn andere Writer in Databricks Runtime 9.1 LTS Vorgänge wie DELETE, MERGE, UPDATE oder OPTIMIZE gleichzeitig ausführen, kann die automatische Komprimierung dazu führen, dass diese anderen Aufträge Fehler aufgrund eines Transaktionskonflikts verursachen. Dies ist kein Problem in Databricks Runtime 10.4 LTS und höher.

Optimierte Schreibvorgänge für Delta Lake in Azure Databricks

Optimierte Schreibvorgänge verbessern die Dateigröße, während Daten geschrieben werden, und nutzen nachfolgende Lesevorgänge in der Tabelle.

Optimierte Schreibvorgänge sind für partitionierte Tabellen am effektivsten, da sie die Anzahl der kleinen Dateien reduzieren, die in jede Partition geschrieben werden. Das Schreiben weniger großer Dateien ist effizienter als das Schreiben vieler kleiner Dateien; es kann jedoch zu einer Erhöhung der Schreiblatenz kommen, da Daten vor dem Schreiben gemischt werden.

Die folgende Abbildung zeigt, wie optimierte Schreibvorgänge funktionieren:

Optimierte Schreibvorgänge

Hinweis

Möglicherweise verfügen Sie über Code, mit dem coalesce(n) oder repartition(n) ausgeführt werden, kurz bevor Sie Ihre Daten schreiben, um die Anzahl der geschriebenen Dateien zu steuern. Durch optimierte Schreibvorgänge entfällt die Notwendigkeit der Verwendung dieses Musters.

Optimierte Schreibvorgänge sind standardmäßig für die folgenden Vorgänge in Databricks Runtime 9.1 LTS und höher aktiviert:

  • MERGE
  • UPDATE mit Unterabfragen
  • DELETE mit Unterabfragen

Optimierte Schreibvorgänge sind auch für alle CTAS-Anweisungen und INSERT-Vorgänge aktiviert, wenn SQL-Warehouses verwendet werden. In Databricks Runtime 13.3 LTS und höher sind für alle in Unity Catalog registrierten Deltatabellen optimierte Schreibvorgänge für CTAS-Anweisungen und INSERT-Vorgänge für partitionierte Tabellen aktiviert.

Optimierte Schreibvorgänge können auf Tabellen- oder Sitzungsebene mit den folgenden Einstellungen aktiviert werden:

  • Tabelleneinstellung: delta.autoOptimize.optimizeWrite
  • SparkSession-Einstellung: spark.databricks.delta.optimizeWrite.enabled

Bei diesen Einstellungen sind die folgenden Optionen möglich:

Optionen Verhalten
true Verwenden Sie 128 MB als Zieldateigröße.
false Deaktiviert optimierte Schreibvorgänge. Kann auf Sitzungsebene festgelegt werden, um die automatische Komprimierung für alle Delta-Tabellen außer Kraft zu setzen, die im Workload geändert wurden.

Festlegen der Größe der Zieldatei

Wenn Sie die Größe der Dateien in Ihrer Delta-Tabelle anpassen möchten, legen Sie die table-Eigenschaftdelta.targetFileSize auf die gewünschte Größe fest. Wenn diese Eigenschaft festgelegt ist, versuchen alle Vorgänge zur Optimierung des Datenlayouts Dateien der angegebenen Größe zu generieren. Beispielen sind Optimieren oder Z-Reihenfolge, automatisches Komprimieren und optimierte Schreibvorgänge.

Hinweis

Wenn Sie verwaltete Unity Catalog-Tabellen und SQL-Warehouses oder Databricks Runtime 11.3 LTS und höher verwenden, berücksichtigen nur OPTIMIZE-Befehle die Einstellung targetFileSize.

Table-Eigenschaft
delta.targetFileSize

Typ: Größe in Byte oder höheren Einheiten.

Die Größe der Zieldatei. Beispiel: 104857600 (Byte) oder 100mb.

Standardwert: None

Für vorhandene Tabellen können Sie mit dem SQL-Befehl ALTER TABLE SET TBL PROPERTIES Eigenschaften festlegen und aufheben. Sie können diese Eigenschaften auch automatisch festlegen, wenn Sie neue Tabellen mit Spark-Sitzungskonfigurationen erstellen. Ausführlichere Informationen finden Sie unter Referenz zu Delta-Tabelleneigenschaften.

Automatisches Abstimmen der Dateigröße basierend auf dem Workload

Databricks empfiehlt, die Table-Eigenschaft delta.tuneFileSizesForRewrites für alle Tabellen auf true festzulegen, die von vielen MERGE- oder DML-Vorgängen betroffen sind, unabhängig von Databricks Runtime, Unity Catalog oder anderen Optimierungen. Bei Festlegung auf true wird die Zieldateigröße der Tabelle auf einen viel niedrigeren Schwellenwert festgelegt, wodurch schreibintensive Vorgänge beschleunigt werden.

Wenn nicht explizit festgelegt, erkennt Azure Databricks automatisch, ob 9 der letzten 10 Vorgänge in einer Delta-Tabelle MERGE-Vorgänge waren und legt diese Tabelleneigenschaft auf true fest. Sie müssen diese Eigenschaft explizit auf false festlegen, um dieses Verhalten zu vermeiden.

Table-Eigenschaft
delta.tuneFileSizesForRewrites

Geben Sie Folgendes ein: Boolean

Gibt an, ob Dateigrößen zur Optimierung des Datenlayouts angepasst werden.

Standardwert: None

Für vorhandene Tabellen können Sie mit dem SQL-Befehl ALTER TABLE SET TBL PROPERTIES Eigenschaften festlegen und aufheben. Sie können diese Eigenschaften auch automatisch festlegen, wenn Sie neue Tabellen mit Spark-Sitzungskonfigurationen erstellen. Ausführlichere Informationen finden Sie unter Referenz zu Delta-Tabelleneigenschaften.

Automatisches Abstimmen der Dateigröße basierend auf der Tabellengröße

Um den Bedarf an manueller Abstimmung zu minimieren, kann Azure Databricks die Dateigröße von Delta-Tabellen basierend auf der Größe der Tabelle automatisch abstimmen. Azure Databricks verwendet kleinere Dateigrößen für kleinere Tabellen und größere Dateigrößen für größere Tabellen, damit die Anzahl von Dateien in der Tabelle nicht zu stark ansteigt. Azure Databricks führt keine automatische Anpassung von Tabellen durch, die Sie mit einer spezifischen Zielgröße oder basierend auf einer Workload mit häufigen Umschreibungen angepasst haben.

Die Größe der Zieldatei richtet sich nach der aktuellen Größe der Delta-Tabelle. Für Tabellen, die kleiner sind als 2,56 TB, beträgt die automatisch optimierte Größe der Zieldatei 256 MB. Bei Tabellen mit einer Größe zwischen 2,56 TB und 10 TB steigt die Zielgröße linear von 256 MB auf 1 GB. Für Tabellen, die größer sind als 10 TB, beträgt die Zieldateigröße 1 GB.

Hinweis

Wenn die Zieldateigröße für eine Tabelle ansteigt, werden vorhandene Dateien mit dem Befehl OPTIMIZE nicht erneut optimiert und in größere Dateien umgewandelt. Eine große Tabelle kann daher immer einige Dateien enthalten, die kleiner sind als die Zielgröße. Wenn es erforderlich ist, auch diese kleineren Dateien in größere Dateien zu optimieren, können Sie mit der Tabelleneigenschaft delta.targetFileSize eine feste Zieldateigröße für die Tabelle konfigurieren.

Wenn eine Tabelle inkrementell geschrieben wird, ergeben sich abhängig von der Tabellengröße in etwa folgende Zieldateigrößen und Dateianzahlen. Die Dateianzahl in dieser Tabelle ist nur ein Beispiel. Die tatsächlichen Ergebnisse hängen von zahlreichen Faktoren ab.

Tabellengröße Größe der Zieldatei Ungefähre Anzahl von Dateien in der Tabelle
10 GB 256 MB 40
1 TB 256 MB 4096
2,56 TB 256 MB 10.240
3 TB 307 MB 12108
5 TB 512 MB 17339
7 TB 716 MB 20784
10 TB 1 GB 24437
20 TB 1 GB 34437
50 TB 1 GB 64437
100 TB 1 GB 114437

Einschränken der Zeilen, die in einer Datendatei geschrieben werden

Bei Tabellen mit begrenztem Datenvolumen tritt möglicherweise ein Fehler auf, wenn die Anzahl der Zeilen in einer bestimmten Datendatei die Supportlimits des Parquet-Formats überschreitet. Um diesen Fehler zu vermeiden, können Sie die SQL-Sitzungskonfiguration spark.sql.files.maxRecordsPerFile verwenden, um die maximale Anzahl von Datensätzen anzugeben, die in eine einzelne Datei für eine Delta Lake-Tabelle geschrieben werden sollen. Wenn Sie null oder einen negativen Wert angeben, gilt kein Grenzwert.

Ab Databricks Runtime 11.3 LTS können Sie auch die DataFrameWriter-Option maxRecordsPerFile nutzen, wenn Sie die DataFrame-APIs verwenden, um in eine Delta Lake-Tabelle zu schreiben. Bei Angabe von maxRecordsPerFile wird der Wert der SQL-Sitzungskonfiguration spark.sql.files.maxRecordsPerFile ignoriert.

Hinweis

Databricks empfiehlt die Verwendung dieser Option nicht, es sei denn, dies ist erforderlich, um den oben genannten Fehler zu vermeiden. Diese Einstellung kann für einige verwaltete Unity Catalog-Tabellen mit sehr begrenztem Datenvolumen weiterhin erforderlich sein.

Upgrade auf automatische Komprimierung im Hintergrund

Die automatische Komprimierung im Hintergrund ist für verwaltete Unity Catalog-Tabellen in Databricks Runtime 11.3 LTS und höher verfügbar. Gehen Sie bei der Migration einer Legacyworkload oder tabelle wie folgt vor:

  • Entfernen Sie die Spark-Konfiguration spark.databricks.delta.autoCompact.enabled aus den Cluster- oder Notebook-Konfigurationseinstellungen.
  • Führen Sie für jede Tabelle ALTER TABLE <table_name> UNSET TBLPROPERTIES (delta.autoOptimize.autoCompact) aus, um alle Legacyeinstellungen für die automatische Komprimierung zu entfernen.

Nach dem Entfernen dieser Legacykonfigurationen sollte die automatische Komprimierung im Hintergrund automatisch für alle verwalteten Unity Catalog-Tabellen ausgelöst werden.