Konfigurieren von Delta Lake zum Steuern der Datendateigröße
Hinweis
Die Empfehlungen in diesem Artikel gelten nicht für von Unity Catalog verwaltete Tabellen. Databricks empfiehlt die Verwendung von verwalteten Unity Catalog-Tabellen mit Standardeinstellungen für alle neuen Delta-Tabellen.
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. Siehe Prädiktive Optimierung für verwaltete Unity Catalog-Tabellen.
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.
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.
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-Konfiguration spark.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:
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 UnterabfragenDELETE
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-Eigenschaft delta.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.