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.
Das Überspringen von Dateien ist eine Delta Lake-Leseoptimierung, mit der das Spark-Modul das Scannen von Datendateien vermeiden kann, die keine übereinstimmenden Zeilen enthalten können. Da das Modul weniger Daten liest, werden Abfragen schneller ausgeführt und verbrauchen weniger E/A-Ressourcen.
So funktioniert das Überspringen von Dateien
Jedes Mal, wenn eine Datendatei in eine Delta-Tabelle geschrieben wird, zeichnet Delta Lake statistiken pro Dateispalte im Transaktionsprotokoll auf. Diese Statistiken umfassen den Minimalwert, den Maximalwert und die NULL-Anzahl für jede indizierte Spalte in dieser Datei.
Wenn eine Abfrage ein Filter-Prädikat enthält, vergleicht das Modul den Prädikatwert mit dem für jede Datei gespeicherten Min/Max-Bereich. Wenn der Prädikatwert außerhalb des Bereichs für eine Datei liegt, wird diese Datei vollständig übersprungen – es ist nicht erforderlich, sie zu öffnen oder zu scannen.
Betrachten Sie beispielsweise eine sales Tabelle, die nach Datumsbereichen in fünf Datendateien unterteilt ist:
| Datei | Min/Max.-Statistiken | Ergebnis für WHERE date = '2024-03-15' |
|---|---|---|
| Datei 1 | date [2024-01-01 .. 2024-02-28] |
Übersprungen |
| Datei 2 | date [2024-03-01 .. 2024-03-31] |
Gelesen ✓ |
| Datei 3 | date [2024-04-01 .. 2024-05-31] |
Übersprungen |
| Datei 4 | date [2024-06-01 .. 2024-07-31] |
Übersprungen |
| Datei 5 | date [2024-08-01 .. 2024-09-30] |
Übersprungen |
In diesem Fall werden vier von fünf Dateien übersprungen – 80% weniger gescannte Daten – da ihre Min/Max-Bereiche nicht mit dem Filterwert überlappen.
Important
Der Datentyp des Prädikatwerts muss mit dem Spaltentyp übereinstimmen. Ein Typkonflikt kann verhindern, dass das Modul Statistiken auf Dateiebene zum Überspringen verwendet.
Standardverhalten
Delta Lake sammelt Dateistatistiken automatisch mit den folgenden Standardwerten:
- Nur die ersten 32 Spalten (nach Ordnungsposition) haben Statistiken gesammelt.
- Statistiken, die pro Spalte pro Datei nachverfolgt werden: Min., Max. und Nullanzahl
- Das Sammeln von Statistiken zu langen Zeichenfolgenspalten ist kostspielig und erhöht den Schreibaufwand, sodass die Positionierung wichtig ist.
Die delta.dataSkippingNumIndexedCols Tabelleneigenschaft steuert den Spaltengrenzwert. Spalten, die über diesen Schwellenwert hinausgehen, erhalten keine Statistiken auf Dateiebene und können nicht am Überspringen von Dateien teilnehmen.
Berechtigte Datentypen
Nicht alle Spaltentypen unterstützen Statistiken auf Dateiebene und daher das Überspringen von Dateien. Das Modul wertet den Datentyp jeder Spalte aus, um zu bestimmen, ob Min/Max-Statistiken erfasst werden können.
Immer geeignet (Atomtypen)
-
NumericType(ByteType,ShortType,IntegerType,LongType,FloatType,DoubleType,DecimalType) DateTypeTimestampTypeTimestampNTZTypeStringType
Bedingt berechtigt
Note
Die folgenden Typen können ab Fabric Spark Runtime 2.0 (Delta 4.1) aktiviert werden.
-
VariantType: wennspark.databricks.delta.variantShredding.collectVariantDataSkippingStatsaktiviert ist. -
ArrayType: wennspark.microsoft.delta.skipping.complexTypes.enabledaktiviert ist und der Elementtyp selbst berechtigt ist. -
MapType: wennspark.microsoft.delta.skipping.complexTypes.enabledaktiviert ist und sowohl die Schlüssel- als auch die Werttypen berechtigt sind.
Nicht berechtigt
BinaryTypeBooleanType-
StructType(als Ganzes – Blattfelder innerhalb von Strukturen werden einzeln ausgewertet) NullType
Maximieren der Spaltenabdeckung
Um den größten Vorteil beim Überspringen von Dateien zu erzielen, stellen Sie sicher, dass die Spalten, nach denen Sie am häufigsten filtern, von Dateistatistiken abgedeckt werden.
Häufig gefilterte Spalten zuerst positionieren
Platzieren Sie Spalten, die am häufigsten in WHERE-Klauseln, Join-Schlüsseln und Filterprädikaten vorkommen, in den ersten 32 Positionen des Tabellenschemas. Verschieben Sie lange Zeichenfolgenspalten oder Spalten mit geringer Selektivität hinter Position 32, um keinen Schreibaufwand für Statistiken zu verschwenden, die nur selten nützlich sind.
Anzahl der indizierten Spalten erhöhen
Wenn Ihre Tabelle mehr als 32 Spalten enthält, die von Statistiken profitieren, erhöhen Sie den Standardgrenzwert:
ALTER TABLE table_name SET TBLPROPERTIES ('delta.dataSkippingNumIndexedCols' = '40')
Note
Das Erhöhen der Indizierungsspaltenanzahl erhöht den Schreibaufwand für jede Datendatei. Erhöhen Sie diesen Wert nur, wenn die zusätzlichen Spalten häufig in Filter-Prädikaten verwendet werden.
Angeben exakter Spalten für Statistiken
Verwenden Sie delta.dataSkippingStatsColumns, um explizit zu steuern, welche Spalten die Dateistatistik erhalten, unabhängig von ihrer Position:
ALTER TABLE table_name SET TBLPROPERTIES ('delta.dataSkippingStatsColumns' = 'col1,col2')
Wenn delta.dataSkippingStatsColumns festgelegt ist, werden nur für die angegebenen Spalten Statistiken erfasst. Dieser Ansatz bietet Ihnen eine differenzierte Kontrolle über den Kompromiss zwischen Schreibkosten und Lesevorteil.
Dateiüberspringen mit Datenlayout kombinieren
Das Überspringen von Dateien funktioniert am besten, wenn verwandte Werte in denselben Dateien gespeichert werden. Techniken wie ZORDER BY und Liquid Clustering reorganisieren Daten physisch so, dass Zeilen mit ähnlichen Spaltenwerten in denselben Dateien gespeichert werden. Das räumliche Zusammenfassen ähnlicher Werte macht die Min-/Max.-Bereiche pro Datei enger, was den Anteil der Dateien erhöht, die die Engine bei einem bestimmten Filter überspringen kann.
Weitere Informationen zur Datenlayoutoptimierung finden Sie unter "Tabellenkomprimierung", "Liquid Clustering" und "Z-Order".