Dynamische Dateireduzierung

Wenn eine Abfrage eine große Delta Lake-Tabelle mit einer kleineren, gefilterten Tabelle verbindet, sind die Filterwerte erst bekannt, wenn die Abfrage ausgeführt wird. Ohne Laufzeit-Pruning scannt die Abfrage jede Datei in der großen Tabelle, selbst Dateien, die keine passenden Zeilen enthalten. Dynamisches Datei-Pruning löst dieses Problem. Zur Laufzeit schiebt der Optimierer die Filterergebnisse von einer Seite des Joins auf den Scan der Delta Lake-Tabelle und überspringt Dateien, die keine passenden Zeilen enthalten können.

Dynamisches Datei-Pruning ist standardmäßig aktiviert. Du musst deine Anfragen nicht ändern, um davon zu profitieren.

Wenn dynamisches Datei-Pruning angewendet wird

Dynamisches Datei-Pruning gilt nur für Joins auf Delta-Lake-Tabellen. In einer MERGE Anweisung verwendet sie die Join-Schlüsselwerte aus der Quelle, um Zieldateien zu überspringen, wenn die Merge-Bedingung eine Quellspalte mit einer Zielspalte auf Gleichheit vergleicht. In UPDATE- und DELETE-Anweisungen gilt sie, wenn die Bedingung eine Unteranfrage enthält, die denselben Vergleich durchführt.

Die dynamische Dateibereinigung in den Anweisungen MERGE, UPDATE und DELETE erfordert Photon-fähige Compute-Ressourcen. Für SELECT Statements bietet Photon umfassenderes und zuverlässigeres dynamisches Pruning von Dateien. Ohne Photon könnte dynamisches Datei-Pruning je nach Abfrageform und Ausführungsplan weiterhin auf SELECT-Anweisungen angewendet werden. Siehe Was ist Photon?.

Dynamisches Datei-Pruning verbessert die Leistung vor allem bei nicht partitionierten Tabellen und bei Joins auf nicht partitionierten Spalten. Standardmäßig wird sie nur ausgelöst, wenn die große Delta-Lake-Tabelle im Join mindestens 10 GB groß ist und mindestens 10 Dateien enthält. Siehe Konfiguration.

Dynamisches Datei-Pruning reduziert außerdem Schreibkonflikte. Wenn Delta Lake während eines Commits auf Konflikte prüft, betrachtet es Dateien, die vom dynamischen Datei-Pruning übersprungen wurden. Dies reduziert die Anzahl der fehlgeschlagenen Transaktionen. Siehe Isolationsstufen und Schreibkonflikte.

Bewährte Vorgehensweisen

Der Performance-Effekt des dynamischen Datei-Prunings korreliert mit der Art und Weise, wie Daten gruppiert werden. Wenn die Werte, über die du verknüpfst, über alle Dateien verteilt sind, überspringt dynamisches Datei-Pruning nur wenige Dateien. Um das dynamische Datei-Pruning zu unterstützen, um mehr Dateien zu überspringen, befolgen Sie diese Vorgehensweisen:

  • Verwende Liquid-Clustering auf den Spalten, die du häufig für Joins verwendest, sodass passende Zeilen gemeinsam in weniger Dateien abgelegt werden.
  • Verwenden Sie Photon-fähiges Compute, das MERGE, UPDATE und DELETE Anweisungen für das dynamische Datei-Pruning erfordern.

Konfiguration

Für die meisten Workloads müssen diese Einstellungen nicht geändert werden. Erwägen Sie, die Schwellenwerte anzupassen, wenn ein Join gegen eine kleinere Delta Lake-Tabelle von einem Pruning profitieren würde, aber unter dem standardmäßigen Schwellenwert für Größe oder Dateianzahl liegt.

Diese Apache Spark-Konfigurationseigenschaften steuern das dynamische Datei-Pruning:

Property Typ Voreinstellung Description
spark.databricks.optimizer.dynamicFilePruning Boolean true Schaltet das dynamische Datei-Pruning ein- oder aus.
spark.databricks.optimizer.deltaTableSizeThreshold Long 10000000000 (10 GB) Die Mindestgröße, in Bytes, der großen Delta Lake-Tabelle im Join, der das dynamische Datei-Pruning auslöst. Bei einer kleineren Tabelle ist es in der Regel günstiger, die ganze Tabelle zu scannen, als die Filter nach unten zu verschieben.
Um die Größe einer Delta-Lake-Tabelle zu bestimmen, führen Sie DESCRIBE DETAIL table_name aus und überprüfen Sie die sizeInBytes-Spalte.
spark.databricks.optimizer.deltaTableFilesThreshold Integer 10 Die minimale Anzahl der Dateien in der großen Delta Lake-Tabelle im Join, die das dynamische Datei-Pruning auslöst. Wenn die Tabelle weniger Dateien als diesen Schwellenwert hat, wird kein dynamisches Datei-Pruning durchgeführt, da es für eine Tabelle mit nur wenigen Dateien möglicherweise nicht sinnvoll ist.
Um die Anzahl der Dateien in einer Delta Lake-Tabelle zu finden, führen Sie DESCRIBE DETAIL table_name aus und prüfen Sie die Spalte numFiles.