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.
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,UPDATEundDELETEAnweisungen 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. |