Überspringen von Daten für Delta Lake

Informationen zum Überspringen von Daten werden automatisch gesammelt, wenn Sie Daten in eine Delta-Tabelle schreiben. Delta Lake in Azure Databricks nutzt diese Informationen (Mindest- und Höchstwerte, NULL-Anzahl und Gesamtanzahl der Datensätze pro Datei) zur Abfragezeit, um schnellere Abfragen zu ermöglichen.

Hinweis

In Databricks Runtime 13.3 und höher empfiehlt Databricks die Verwendung von Clustering für das Delta-Tabellenlayout. Das Clustering ist nicht mit der Z-Reihenfolge kompatibel. Weitere Informationen finden Sie unter Verwenden von Liquid Clustering für Delta-Tabellen.

Für Spalten, die in ZORDER-Anweisungen verwendet werden, müssen Statistiken gesammelt werden. Weitere Informationen finden Sie unter Worum handelt es sich bei der Z-Reihenfolge?.

Angeben von Delta-Statistikspalten

Delta Lake erfasst standardmäßig Statistikinformationen für die ersten 32 Spalten, die in Ihrem Tabellenschema definiert sind. Für diese Sammlung gilt jedes Feld in einer geschachtelten Spalte als einzelne Spalte. Sie können dieses Verhalten ändern, indem Sie eine der folgenden Tabelleneigenschaften festlegen:

Table-Eigenschaft Unterstützte Databricks Runtime-Version Beschreibung
delta.dataSkippingNumIndexedCols Alle unterstützten Databricks Runtime-Versionen Erhöhen oder verringern Sie die Anzahl der Spalten, für die Delta Statistiken sammelt. Hängt von der Spaltenreihenfolge ab.
delta.dataSkippingStatsColumns Databricks Runtime 13.3 LTS und höher Geben Sie eine Liste von Spaltennamen an, für die Delta Lake Statistiken sammelt. Hat Vorrang vor dataSkippingNumIndexedCols.

Tabelleneigenschaften können bei der Tabellenerstellung oder mit ALTER TABLE-Anweisungen festgelegt werden. Weitere Informationen finden Sie unter Referenz zu Delta-Tabelleneigenschaften.

Durch das Aktualisieren dieser Eigenschaft werden Statistiken für vorhandene Daten nicht automatisch neu berechnet. Stattdessen wirkt sich dies auf das Verhalten einer zukünftigen Statistiksammlung aus, wenn Daten in der Tabelle hinzugefügt oder aktualisiert werden. Delta Lake nutzt keine Statistiken für Spalten, die nicht in der aktuellen Liste der Statistikspalten enthalten sind.

In Databricks Runtime 14.3 LTS und höher können Sie die Neuberechnung von Statistiken für eine Delta-Tabelle mithilfe des folgenden Befehls manuell auslösen:

ANALYZE TABLE table_name COMPUTE DELTA STATISTICS

Hinweis

Lange Zeichenfolgen werden während der Statistiksammlung abgeschnitten. Sie können lange Zeichenfolgenspalten aus der Statistiksammlung ausschließen, insbesondere, wenn die Spalten nicht häufig zum Filtern von Abfragen verwendet werden.

Worum handelt es sich bei der Z-Reihenfolge?

Die Z-Reihenfolge ist eine Technik für die Colocation von zusammengehörigen Informationen im selben Satz von Dateien. Diese Colocation wird von den Delta Lake in Azure Databricks-Algorithmen zum Überspringen von Daten automatisch genutzt. Dieses Verhalten reduziert erheblich die Menge an Daten, die Delta Lake in Azure Databricks lesen muss. Wenn Daten in der Z-Reihenfolge sortiert werden sollen, geben Sie die Spalten, nach denen sortiert werden soll, in der ZORDER BY-Klausel an:

OPTIMIZE events
WHERE date >= current_timestamp() - INTERVAL 1 day
ZORDER BY (eventType)

Wenn Sie erwarten, dass eine Spalte häufig in Abfrageprädikaten verwendet wird, und wenn diese Spalte eine hohe Kardinalität aufweist (d. h. eine große Anzahl von eindeutigen Werten), dann verwenden Sie ZORDER BY.

Für ZORDER BY können Sie mehrere Spalten in Form einer durch Kommas getrennten Liste angeben. Allerdings sinkt die Effizienz der Colocation mit jeder zusätzlichen Spalte. Eine Z-Reihenfolge für Spalten, für die keine Statistiken erfasst werden, wäre ineffizient und eine Vergeudung von Ressourcen. Dies liegt daran, dass für das Überspringen von Daten spaltenbezogene Statistiken wie Mindest- und Höchstwerte sowie Anzahl erforderlich sind. Sie können die Statistikerfassung für bestimmte Spalten konfigurieren, indem Sie die Spalten im Schema neu anordnen oder die Anzahl von Spalten erhöhen, für die Statistiken erfasst werden sollen.

Hinweis

  • Die Z-Reihenfolge ist nicht idempotent, sondern zielt darauf ab, ein inkrementeller Vorgang zu sein. Es ist nicht garantiert, dass sich die für die Z-Reihenfolge benötigte Zeit über mehrere Ausführungen hinweg verringert. Wenn jedoch keine neuen Daten zu einer Partition hinzugefügt wurden, auf die kurz zuvor eine Z-Reihenfolge angewendet wurde, hat eine weitere Anwendung der Z-Reihenfolge auf diese Partition keine Auswirkung.

  • Die Z-Reihenfolge zielt darauf ab, gleichmäßige Datendateien in Bezug auf die Anzahl von Tupeln zu erzeugen, aber nicht notwendigerweise in Bezug auf die Datengröße auf dem Datenträger. Die beiden Kennzahlen sind in den meisten Fällen korreliert. Es kann jedoch Situationen geben, in denen dies nicht der Fall ist, was zu Abweichungen bei den Zeiten für die Optimierungsaufgaben führt.

    Wenn Sie beispielsweise ZORDER BYdate ausführen und die neuesten Datensätze wesentlich umfangreicher sind (z. B. längere Arrays oder Zeichenfolgen) als die vorherigen, ist zu erwarten, dass die Aufgabendauer des OPTIMIZE-Auftrags sowie die resultierenden Dateigrößen abweichen. Dies ist jedoch nur ein Problem für den Befehl OPTIMIZE selbst, es sollten sich keine negativen Auswirkungen für nachfolgende Abfragen ergeben.