Teilen über


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.

Partitionsmetadatenprotokollierung verwenden

In Databricks Runtime 13.3 LTS und höher können Sie optional die Partitionsmetadatenprotokollierung aktivieren, eine Partitionsermittlungsstrategie für externe Tabellen, die im Unity-Katalog registriert sind. Dieses Verhalten entspricht der Partitionsermittlungsstrategie, die im Hive-Metastore verwendet wird. Dieses Verhalten wirkt sich nur auf externe Unity-Katalog-Tabellen aus, die Partitionen aufweisen und Parkett, ORC, CSV, Avro 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.

Aktivieren der Partitionsmetadatenprotokollierung

Wenn Sie die Partitionsmetadatenprotokollierung für eine Tabelle aktivieren möchten, legen Sie die Tabelleneigenschaft fest, wenn Sie eine externe Tabelle erstellen, wie im folgenden Beispiel gezeigt:

CREATE OR REPLACE TABLE <catalog>.<schema>.<table-name>
USING <format>
PARTITIONED BY (<partition-column-list>)
TBLPROPERTIES ('partitionMetadataEnabled' = 'true')
LOCATION 'abfss://<bucket-path>/<table-directory>';

Nachdem Sie eine Tabelle mit aktivierter Partitionsmetadatenprotokollierung erstellt haben, verwendet Azure Databricks die Partitionsmetadaten, um die Tabelle in allen nachfolgenden Workloads zu lesen.

Sie können spark conf auch verwenden, um Partitionsmetadaten für Ihre aktuelle SparkSession zu aktivieren. Wenn diese Option aktiviert ist, werden externe Tabellen erstellt, die in der SparkSession erstellt wurden, wobei die Partitionsmetadatentabelleneigenschaft aktiviert ist. Die Spark conf ist standardmäßig deaktiviert.

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;

Sie können die Spark conf überschreiben, indem Sie die Tabelleneigenschaft explizit aktivieren oder deaktivieren, wenn eine Tabelle erstellt wird.

Wichtig

In Databricks Runtime 13.3 LTS und höher können Sie nur Tabellen mit aktivierter Partitionsmetadatenprotokollierung lesen und schreiben. Um diese Tabellen mit Databricks Runtime 12.2 LTS zu lesen, müssen Sie die Tabelle ablegen und neu erstellen, wobei die Partitionsmetadatentabelleneigenschaft deaktiviert ist.

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>';

Sie können überprüfen, ob eine Tabelle mithilfe von Partitionsmetadaten erstellt wurde:

  • Überprüfen Sie den Abschnitt mit den Tabelleneigenschaften, der von DESCRIBE EXTENDED table_name.
  • Überprüfen Sie die Tabellenmetadaten mit dem Katalog-Explorer.

Die Tabelleneigenschaften enthalten partitionMetadataEnabled=true.

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.

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.