Teilen über


Arbeiten mit externen Tabellen

Im Unity-Katalog speichert eine externe Tabelle ihre Datendateien im Cloudobjektspeicher in Ihrem Cloudmandanten. Unity-Katalog verwaltet weiterhin die Metadaten der Tabelle und stellt eine vollständige Datengovernance für alle Abfragen sicher. Sie verwaltet jedoch nicht den Lebenszyklus, die Optimierung, den Speicherort oder das Layout der Daten.

Wenn Sie eine externe Tabelle des Unity-Katalogs definieren, müssen Sie einen Speicherort angeben. Dieser Speicherort ist ein externer Speicherort , der im Unity-Katalog registriert ist. Wenn Sie eine externe Tabelle ablegen, entfernt Unity Catalog die Tabellenmetadaten, löscht jedoch nicht die zugrunde liegenden Datendateien.

Dieser Artikel konzentriert sich auf externe Tabellen im Unity Catalog. Externe Tabellen im älteren Hive-Metaspeicher weisen unterschiedliche Verhaltensweisen auf. Weiter Informationen finden Sie unter Datenbankobjekte im Legacy-Hive-Metastore.

Wann externe Tabellen verwendet werden sollen

Databricks empfiehlt die Verwendung externer Tabellen für die folgenden Anwendungsfälle:

  • Sie müssen eine Tabelle registrieren, die von vorhandenen Daten unterstützt wird, die nicht mit verwalteten Tabellen des Unity-Katalogs kompatibel sind.
  • Außerdem benötigen Sie direkten Zugriff auf die Daten von Nicht-Databricks-Clients, die keine anderen externen Zugriffsmuster unterstützen. Unity Catalog-Berechtigungen werden nicht erzwungen, wenn Benutzer über externe Systeme auf Datendateien zugreifen. Siehe Zugriff auf Databricks-Daten mithilfe externer Systeme.

In den meisten Fällen empfiehlt Databricks die Verwendung verwalteter Tabellen im Unity-Katalog , um die automatische Tabellenoptimierung, schnellere Abfrageleistung und geringere Kosten zu nutzen. Informationen zum Migrieren externer Tabellen zu verwalteten Tabellen finden Sie unter Konvertieren einer externen Tabelle in eine verwaltete Unity-Katalogtabelle.

Von Bedeutung

Wenn Sie externe Tabellenmetadaten mit einem Nicht-Databricks-Client aktualisieren oder pfadbasierten Zugriff aus Databricks verwenden, werden diese Metadaten nicht automatisch mit Unity-Katalog synchronisiert. Databricks empfiehlt solche Metadatenaktualisierungen nicht, aber wenn Sie dennoch eine durchführen, müssen Sie MSCK REPAIR TABLE <table-name> SYNC METADATA ausführen, um das Schema im Unity-Katalog zu aktualisieren. Siehe REPAIR TABLE.

Dateiformate für externe Tabellen

Für externe Tabellen können die folgenden Dateiformate verwendet werden:

  • DELTA
  • CSV-Datei
  • JSON
  • AVRO
  • PARKETT
  • ORK
  • TEXT

Erstellen einer externen Tabelle

Sie können externe Tabellen mithilfe von SQL-Befehlen oder DataFrame-Schreibvorgängen erstellen.

Vorbemerkungen

Bevor Sie eine externe Tabelle erstellen, müssen Sie zuerst einen externen Speicherort konfigurieren, der Zugriff auf Ihren Cloudspeicher gewährt.

Weitere Informationen zum Konfigurieren externer Speicherorte finden Sie unter Erstellen eines externen Speicherorts zum Verbinden des Cloudspeichers mit Azure Databricks.

Zum Erstellen einer externe Tabelle müssen Sie die folgenden Berechtigungsanforderungen erfüllen:

  • Die CREATE EXTERNAL TABLE-Berechtigung für einen externen Speicherort, die Zugriff auf den LOCATION gewährt, auf den von der externen Tabelle zugegriffen wird.
  • Die USE CATALOG Berechtigung für den übergeordneten Katalog der Tabelle.
  • Die USE SCHEMA Berechtigung für das übergeordnete Schema der Tabelle.
  • Die CREATE TABLE Berechtigung für das übergeordnete Schema der Tabelle.

Hinweis

Wenn ein externer S3-Speicherort mehreren Metaspeichern zugeordnet ist, vermeiden Sie das Gewähren des Schreibzugriffs auf Tabellen, die diesen S3-Speicherort verwenden, da Schreibvorgänge aus verschiedenen Metaspeichern in derselben externen Tabelle zu Konsistenzproblemen führen können. Das Lesen desselben externen S3-Speicherorts über mehrere Metastores ist jedoch sicher.

SQL-Befehlsbeispiele

Verwenden Sie eines der folgenden Befehlsbeispiele in einem Notebook oder im SQL-Abfrage-Editor, um eine externe Tabelle zu erstellen.

Ersetzen Sie in den folgenden Beispielen die Platzhalterwerte:

  • <catalog>: Der Name des Katalogs, der die Tabelle enthalten wird.
  • <schema>: Der Name des Schemas, das die Tabelle enthalten wird.
  • <table-name>: Einen Namen für die Tabelle.
  • <column-specification>: Name und Datentyp für jede Spalte.
  • <bucket-path>: Der Pfad zum Cloudspeicher-Bucket, in dem die Tabelle erstellt wird.
  • <table-directory>: Ein Verzeichnis, in dem die Tabelle erstellt wird. Verwenden Sie ein eindeutiges Verzeichnis für jede Tabelle.

ADLS

CREATE TABLE <catalog>.<schema>.<table-name>
(
  <column-specification>
)
LOCATION 'abfss://<bucket-path>/<table-directory>';

S3

CREATE TABLE <catalog>.<schema>.<table-name>
(
  <column-specification>
)
LOCATION 's3://<bucket-path>/<table-directory>';

Weitere Informationen zu Tabellenerstellungsparametern finden Sie unter CREATE TABLE.

DataFrame-Schreibvorgänge

Sie können auch externe Tabellen aus Abfrageergebnissen oder DataFrame-Schreibvorgängen erstellen. Verwenden Sie die LOCATION Klausel, um den externen Speicherpfad beim Erstellen von Tabellen mit DataFrames anzugeben.

Die folgenden SQL-Syntaxoptionen funktionieren mit DataFrame-Vorgängen:

Löschen einer externen Tabelle

Zum Löschen einer Tabelle müssen Sie die besitzende Person sein oder über die Berechtigung MANAGE für die Tabelle verfügen. Führen Sie den folgenden SQL-Befehl aus, um eine externe Tabelle zu löschen:

DROP TABLE IF EXISTS catalog_name.schema_name.table_name;

Wenn Sie eine externe Tabelle löschen, löscht Unity Catalog die zugrunde liegenden Daten im Cloud-Speicher nicht. Sie müssen die zugrunde liegenden Datendateien direkt löschen, wenn Sie die der Tabelle zugeordneten Daten entfernen müssen.

Beispielnotebook: Erstellen externer Tabellen

Mit dem folgenden Beispielnotebook können Sie einen Katalog, ein Schema und eine externe Tabelle erstellen und die Berechtigungen dafür verwalten.

Notebook: Erstellen und Verwalten einer externen Tabelle in Unity Catalog

Notebook abrufen