Index mit Überspringen von Daten

Wichtig

DATASKIPPING INDEX wurde in Databricks Runtime 7.0 entfernt. Es wird empfohlen, stattdessen Delta-Tabellen zu verwenden, die verbesserte Funktionen zum Überspringen von Daten bieten.

Wichtig

Diese Dokumentation wurde eingestellt und wird unter Umständen nicht aktualisiert. Die in diesem Inhalt erwähnten Produkte, Dienste oder Technologien werden nicht mehr unterstützt. Weitere Informationen finden Sie unter Überspringen von Daten für Delta Lake.

Beschreibung

Zusätzlich zur Partitionsbereinigung enthält Databricks Runtime ein weiteres Feature, das das Überprüfen irrelevanter Daten vermeiden soll, nämlich er Indes mit Überspringen von Daten (DATASKIPPING INDEX). Es arbeitet mit Statistiken auf Dateiebene, um zusätzliches Überspringen mit Dateigranularität durchzuführen. Dies funktioniert mit einer Partitionierung im Stil von Hive, ohne davon abhängig zu sein.

Die Effektivität des Überspringens von Daten hängt von den Merkmalen Ihrer Daten und ihrem physischen Layout ab. Da das Überspringen mit Dateigranularität erfolgt, ist es wichtig, dass Ihre Daten horizontal über mehrere Dateien partitioniert sind. Dies geschieht in der Regel aufgrund mehrerer Anfügeaufträge, der Partitionierung (Shuffle) und der Verwendung von Buckets bzw. von spark.sql.files.maxRecordsPerFile. Es funktioniert am besten bei Tabellen mit sortierten Buckets (df.write.bucketBy(...).sortBy(...).saveAsTable(...) / CREATE TABLE ... CLUSTERED BY ... SORTED BY ...) oder mit Spalten, die mit Partitionsschlüsseln korreliert sind (z. B. brandName - modelName, companyID - stockPrice), aber auch, wenn Ihre Daten zufällig eine gewisse Sortiertheit/Clusterung aufweisen (z. B. orderID, bitcoinValue).

Hinweis

Dieses Betafeature hat eine Reihe wichtiger Einschränkungen:

  • Es muss manuell für die jeweilige Tabelle aktiviert werden.
  • Es unterstützt nur SQL, sodass es keine DataFrame-API dafür gibt.
  • Sobald eine Tabelle indiziert ist, sind die Auswirkungen nachfolgender INSERT- oder ADD PARTITION-Vorgänge garantiert nicht sichtbar, bis der Index explizit aktualisiert wurde.

SQL-Syntax

Index erstellen

CREATE DATASKIPPING INDEX ON [TABLE] [db_name.]table_name

Aktiviert das Überspringen von Daten in der angegebenen Tabelle für die ersten (d. h. am weitesten links befindlichen) N unterstützten Spalten, wobei N durch spark.databricks.io.skipping.defaultNumIndexedCols gesteuert wird (Standard: 32)

partitionBy-Spalten sind stets indiziert und zählen nicht zu dieser Anzahl N.

Erstellen eines Index für Spalten

CREATE DATASKIPPING INDEX ON [TABLE] [db_name.]table_name
    FOR COLUMNS (col1, ...)

Aktiviert das Überspringen von Daten in der angegebenen Tabelle für die angegebene Liste von Spalten. Ähnlich wie zuvor werden stets alle partitionBy-Spalten zusätzlich zu den angegebenen Spalten indiziert.

Beschreiben des Index

DESCRIBE DATASKIPPING INDEX [EXTENDED] ON [TABLE] [db_name.]table_name

Zeigt an, welche Spalten der gegebenen Tabelle indiziert sind und welche Arten von Statistiken auf Dateiebene gesammelt werden.

Wenn EXTENDED angegeben wird, wird eine dritte Spalte mit der Bezeichnung effectiveness_score angezeigt, die ein ungefähres Maß dafür liefert, wie vorteilhaft das Überspringen von Daten für die Filter in den entsprechenden Spalten sein dürfte.

Aktualisieren des vollständigen Index

REFRESH DATASKIPPING INDEX ON [TABLE] [db_name.]table_name

Erstellt den gesamten Index neu. Das heißt, alle Partitionen der Tabelle werden neu indiziert.

Aktualisieren von Partitionen

REFRESH DATASKIPPING INDEX ON [TABLE] [db_name.]table_name
    PARTITION (part_col_name1[=val1], part_col_name2[=val2], ...)

Indiziert nur die angegebenen Partitionen neu. Dieser Vorgang sollte im Allgemeinen schneller sein als die vollständige Indexaktualisierung.

Index löschen

DROP DATASKIPPING INDEX ON [TABLE] [db_name.]table_name

Deaktiviert das Überspringen von Daten für die angegebene Tabelle und löscht alle Indexdaten.