Partitionsermittlung für externe Tabellen
In diesem Artikel wird die Standardstrategie für die Partitionsermittlung für externe Unity Catalog-Tabellen beschrieben. Zudem wird eine optionale Einstellung zum Aktivieren eines Partitionsmetadatenprotokolls erläutert, das die Partitionsermittlung mit dem Hive-Metastore konsistent macht.
Databricks empfiehlt, die Partitionsmetadatenprotokollierung für verbesserte Lesegeschwindigkeiten und Abfrageleistung für externe Unity Catalog-Tabellen mit Partitionen zu aktivieren.
Was ist die Standardstrategie für die Partitionsermittlung für Unity Catalog?
Unity Catalog listet standardmäßig alle Verzeichnisse am Tabellenspeicherort rekursiv auf, um Partitionen automatisch zu ermitteln. Bei großen Tabellen mit vielen Partitionsverzeichnissen kann dies die Latenz für viele Tabellenvorgänge erhöhen.
Verwenden der Partitionsmetadatenprotokollierung
Wichtig
Dieses Feature befindet sich in der Public Preview.
In Databricks Runtime 13.3 LTS und höher können Sie optional die Partitionsmetadatenprotokollierung aktivieren, bei der es sich um eine Partitionsermittlungsstrategie für externe Tabellen handelt, die in Unity Catalog registriert sind. Dieses Verhalten entspricht der Partitionsermittlungsstrategie, die im Hive-Metastore verwendet wird. Es wirkt sich nur auf externe Unity Catalog-Tabellen aus, die Partitionen aufweisen und Parquet, ORC, CSV oder JSON verwenden. Databricks empfiehlt, das neue Verhalten für verbesserte Lesegeschwindigkeiten und Abfrageleistung für diese Tabellen zu aktivieren.
Wichtig
Tabellen mit aktivierter Partitionsmetadatenprotokollierung weisen eine Verhaltensänderung für die Partitionsermittlung auf. Anstatt den Tabellenspeicherort automatisch auf Partitionen zu überprüfen, berücksichtigt Unity Catalog nur Partitionen, die in den Partitionsmetadaten registriert sind. Weitere Informationen finden Sie unter Manuelles Hinzufügen, Entfernen oder Reparieren von Partitionsmetadaten.
Diese Verhaltensweise wird die Standardverhaltensweise in einer zukünftigen Databricks Runtime-Version. Tabellen, für die dieses Feature aktiviert ist, können nur mit Databricks Runtime 13.3 LTS und höher gelesen oder geschrieben werden.
Hinweis
Sie müssen versuchen, eine Tabelle mit Databricks Runtime 12.2 LTS oder einer früheren Version abzufragen, um zu bestätigen, dass das neue Partitionsprotokollverhalten nicht verwendet wird.
Aktivieren der Partitionsmetadatenprotokollierung
Um die Partitionsmetadatenprotokollierung für eine Tabelle zu aktivieren, müssen Sie eine Spark-Konfiguration für Ihre aktuelle SparkSession aktivieren und dann eine externe Tabelle erstellen. Diese Einstellung ist nur in der SparkSession erforderlich, in der die Tabelle erstellt wird. Nachdem Sie eine Tabelle mit aktivierter Partitionsmetadatenprotokollierung erstellt haben, wird diese Einstellung als Teil der Tabellenmetadaten beibehalten, und das Feature wird in allen nachfolgenden Workloads verwendet.
Die folgende Syntax veranschaulicht die Verwendung von SQL zum Festlegen einer Spark-Konfiguration in einem Notebook. Sie können Spark-Konfigurationen auch beim Konfigurieren von Compute festlegen.
SET spark.databricks.nonDelta.partitionLog.enabled = true;
Wichtig
In Databricks Runtime 13.3 LTS und höher können Sie nur Tabellen mit aktivierter Partitionsmetadatenprotokollierung lesen und schreiben. Wenn Sie über Workloads verfügen, die unter Databricks Runtime 12.2 LTS oder einer früheren Version ausgeführt werden, die mit Tabellen interagieren müssen, verwenden Sie diese Einstellung nicht.
Externe Tabellen löschen keine zugrunde liegenden Datendateien, wenn Sie sie löschen. Databricks empfiehlt wie im folgenden Beispiel gezeigt die Verwendung der CREATE OR REPLACE
-Syntax zum Upgraden von Tabellen für die Verwendung der Partitionsmetadatenprotokollierung:
CREATE OR REPLACE TABLE <catalog>.<schema>.<table-name>
USING <format>
PARTITIONED BY (<partition-column-list>)
LOCATION 'abfss://<bucket-path>/<table-directory>';
Unity Catalog erzwingt Regeln für Pfadüberlappungen für Tabellen und Volumes. Sie können keine neue Unity Catalog-Tabelle für eine Sammlung von Datendateien registrieren, wenn an diesem Speicherort bereits eine Tabelle vorhanden ist.
Arbeiten mit Tabellen mit Partitionsmetadaten
Databricks empfiehlt die Verwendung von Tabellennamen bei allen Lese- und Schreibvorgängen für alle Tabellen, die bei Unity Catalog registriert sind. Bei Tabellen mit Partitionsmetadaten garantiert dies, dass neue Partitionen, die einer Tabelle hinzugefügt werden, bei Unity Catalog registriert werden. Zudem wird sichergestellt, dass Abfragen für die Tabelle alle registrierten Partitionen lesen.
Die Verwendung pfadbasierter Muster für Lese- oder Schreibvorgänge kann dazu führen, dass Partitionen ignoriert oder nicht beim Unity Catalog-Metastore registriert werden. Informationen finden Sie unter Einschränkungen.
Auflisten von Partitionen
Verwenden Sie den folgenden Befehl, um alle Partitionen anzuzeigen, die in Unity Catalog als Partitionsmetadaten registriert sind:
SHOW PARTITIONS <table-name>
Um zu überprüfen, ob eine einzelne Partition bei Unity Catalog registriert ist, verwenden Sie den folgenden Befehl:
SHOW PARTITIONS <table-name>
PARTITION (<partition-column-name> = <partition-column-value>)
Manuelles Hinzufügen, Entfernen oder Reparieren von Partitionsmetadaten
Unity Catalog erfordert, dass alle Partitionen für externe Tabellen im Verzeichnis enthalten sind, das während der Tabellenregistrierung mithilfe der LOCATION
-Klausel registriert wurde.
Wenn Partitionsmetadaten aktiviert sind, ist die automatische Ermittlung von Partitionen am Tabellenspeicherort deaktiviert. Wenn externe Systeme Daten in den Tabellenspeicherort schreiben oder pfadbasierte Schreibvorgänge zum Hinzufügen oder Überschreiben von Datensätzen in der Tabelle verwenden, müssen Sie die Partitionsmetadaten manuell reparieren.
Azure Databricks verwendet die Partitionierung im Hive-Stil zum Speichern von Tabellen, die von Parquet, ORC, CSV und JSON unterstützt werden. Partitionen im Hive-Stil enthalten Schlüssel-Wert-Paare, die durch ein Gleichheitszeichen im Partitionsverzeichnis verbunden sind (z. B. year=2021/month=01/
).
Wenn Ihre Tabelle die Partitionierung im Hive-Stil verwendet, können Sie MSCK REPAIR
zum Synchronisieren von Partitionsmetadaten in Unity Catalog mit Partitionen am Tabellenspeicherort nutzen. Die folgenden Syntaxbeispiele veranschaulichen allgemeine Vorgänge:
-- Add and remove parition metadata to match directories in table location
MSCK REPAIR TABLE <table_name> SYNC PARTITIONS;
-- Add partitions in the table location that are not registered as partition metadata
MSCK REPAIR TABLE <table_name> ADD PARTITIONS;
-- Drop partitions registered as partition metadata that are not in the table location
MSCK REPAIR TABLE <table_name> DROP PARTITIONS;
Siehe REPAIR TABLE.
Manuelles Angeben von Pfaden für andere Partitionstypen
Wenn Ihre Tabelle keine Partitionierung im Hive-Stil verwendet, müssen Sie Partitionsspeicherorte beim Hinzufügen von Partitionen manuell angeben. Das manuelle Angeben von Partitionen kann auch die Latenz im Vergleich zur MSCK REPAIR
-Syntax verringern, insbesondere bei Tabellen mit einer großen Anzahl von Partitionen. Das folgende Syntaxbeispiel veranschaulicht das Hinzufügen einer Partition:
ALTER TABLE <table-name>
ADD PARTITION (<partition-column-name> = <partition-column-value>)
LOCATION 'abfss://<bucket-path>/<table-directory>/<partition-directory>';
Sie können die ALTER TABLE
-Syntax auch zum Entfernen, Umbenennen, Wiederherstellen und Festlegen von Speicherorten für Partitionen verwenden. Siehe ALTER TABLE ... PARTITION.
Deaktivieren neuer Partitionsmetadaten
Die Spark-Konfiguration, die steuert, ob neue Tabellen Partitionsmetadaten verwenden, ist standardmäßig deaktiviert. Sie können dieses Verhalten auch explizit deaktivieren. Die folgende Syntax verwendet SQL zum Deaktivieren der Spark-Konfiguration:
SET spark.databricks.nonDelta.partitionLog.enabled = false;
Dadurch wird nur gesteuert, ob Tabellen, die in der SparkSession erstellt wurden, Partitionsmetadaten verwenden. Um Partitionsmetadaten für eine Tabelle zu deaktivieren, die das Verhalten verwendet, müssen Sie die Tabelle in einer SparkSession löschen und neu erstellen, für die die Spark-Konfiguration nicht aktiviert ist.
Hinweis
Sie können in Databricks Runtime 12.2 LTS oder einer früheren Version zwar keine Lese- oder Schreibvorgänge für Tabellen mit aktivierten Partitionsmetadaten durchführen, aber Sie können die Anweisung DROP
oder CREATE OR REPLACE TABLE
für diese Tabellen ausführen, wenn Sie über ausreichende Berechtigungen in Unity Catalog verfügen.
Begrenzungen
Es gelten die folgenden Einschränkungen:
- Mithilfe von Databricks Runtime 12.2 LTS oder einer früheren Version können Sie keine Lese- oder Schreibvorgänge für Tabellen mit aktivierten Partitionsmetadaten durchführen.
- Beim Lesen einer Tabelle mithilfe des Verzeichnispfads werden alle Partitionen zurückgegeben, einschließlich aller Partitionen, die manuell hinzugefügt oder gelöscht wurden.
- Wenn Sie Datensätze in eine Tabelle mithilfe eines Pfads anstelle eines Tabellennamens einfügen oder überschreiben, werden die Partitionsmetadaten nicht aufgezeichnet.
- Das Avro-Dateiformat wird nicht unterstützt.