Ablegen oder Ersetzen einer Tabelle

Azure Databricks unterstützt SQL-Standard-DDL-Befehle zum Löschen und Ersetzen von Tabellen, die entweder in Unity Catalog oder im Hive-Metastore registriert sind. Das Verhalten beim Löschen und Ersetzen unterscheidet sich je nach Tabellentyp und Metastore. Wählen Sie den richtigen Befehl aus, um Datenverluste oder gleichzeitige Betriebsfehler zu vermeiden.

Wann eine Tabelle gelöscht werden sollte

Databricks empfiehlt die Verwendung von DROP TABLE, um eine Tabelle aus dem Metastore zu löschen, wenn Sie die Tabelle dauerhaft löschen möchten und nicht beabsichtigen, am selben Speicherort eine neue Tabelle zu erstellen. Beispiel:

DROP TABLE table_name

DROP TABLE weist je nach Tabellentyp unterschiedliche Verhaltensweisen auf und gibt an, ob die Tabelle im Unity-Katalog oder im älteren Hive-Metaspeicher registriert ist.

Tabellentyp Metastore Behavior
Managed Unity-Katalog Die Tabelle wird aus dem Metastore entfernt, und die zugrunde liegenden Daten werden zum Löschen markiert. Sie können UNDROP eine verwaltete Tabelle innerhalb des konfigurierten Wiederherstellungszeitraums (standardmäßig 7 Tage) wiederherstellen. Siehe Ablegen einer verwalteten Tabelle.
Managed Hive Die Tabelle wird aus dem Metastore entfernt, und die zugrunde liegenden Daten werden gelöscht.
External Unity-Katalog Die Tabelle wird aus dem Metastore entfernt, die zugrunde liegenden Daten bleiben jedoch erhalten. URI-Zugriffsberechtigungen unterliegen nun dem externen Speicherort, der die Daten enthält.
External Hive Die Tabelle wird aus dem Metastore entfernt, die zugrunde liegenden Daten bleiben jedoch erhalten. Alle URI-Zugriffsberechtigungen bleiben unverändert.

Unity Catalog verwaltet einen Verlauf von Tabellen mithilfe einer internen Tabellen-ID. Für alle Tabellentypen verfügt der zuvor registrierte Tabellenname nach Abschluss des Ablagevorgangs nicht mehr über eine aktive Verknüpfung zu Daten und Tabellenverlauf aus dem Metastore.

Siehe DROP TABLE.

Note

Databricks empfiehlt nicht, dass Sie eine Tabelle ablegen und dann mit demselben Namen für Produktionspipelinen oder -systeme neu erstellen, da dies zu unerwarteten Ergebnissen für gleichzeitige Vorgänge führen kann. Siehe Ersetzen von Daten durch gleichzeitige Vorgänge.

Wann eine Tabelle ersetzt werden sollte

Databricks empfiehlt die Verwendung von CREATE OR REPLACE TABLE-Anweisungen für Anwendungsfälle, in denen Sie die Zieltabelle vollständig mit neuen Daten überschreiben möchten. Führen Sie beispielsweise den folgenden Befehl aus, um eine Tabelle mit allen Daten aus einem Parkettverzeichnis zu überschreiben:

CREATE OR REPLACE TABLE table_name
AS SELECT * FROM parquet.`/path/to/files`

CREATE OR REPLACE TABLE hat die gleiche Semantik unabhängig vom verwendeten Tabellentyp oder Metastore. CREATE OR REPLACE TABLE hat die folgenden wichtigen Vorteile:

  • Tabelleninhalte werden ersetzt, die Tabellenidentität wird jedoch beibehalten.
  • Der Tabellenverlauf wird beibehalten, und Sie können die Tabelle mit dem RESTORE-Befehl auf eine frühere Version zurücksetzen.
  • Der Vorgang ist eine einzelne Transaktion, sodass es nie eine Zeit gibt, in der die Tabelle nicht vorhanden ist.
  • Das gleichzeitige Lesen von Abfragen aus der Tabelle kann ohne Unterbrechung fortgesetzt werden. Da die Version vor und nach dem Ersetzen weiterhin im Tabellenverlauf vorhanden ist, können gleichzeitige Abfragen bei Bedarf auf eine der beiden Versionen der Tabelle verweisen.
  • Wenn die ursprüngliche Tabelle Spaltenmasken enthält, werden diese Masken für alle Spalten beibehalten, die in der neuen Tabelle noch vorhanden sind. Dadurch wird sichergestellt, dass Datenzugriffsrichtlinien beibehalten werden.

Siehe CREATE TABLE [USING].

Ersetzen von Daten durch gleichzeitige Vorgänge

Wenn Sie einen vollständigen Ersatz von Daten in einer Tabelle ausführen möchten, die möglicherweise in gleichzeitigen Vorgängen verwendet werden kann, müssen Sie dies verwenden CREATE OR REPLACE TABLE.

Sie sollten das folgende Antimuster nicht verwenden:

DROP TABLE IF EXISTS table_name;

CREATE TABLE table_name
AS SELECT * FROM parquet.`/path/to/files`;

Bei allen Tabellentypen, unabhängig davon, ob Sie Unity-Katalog verwenden, kann die Verwendung dieses Musters zu einem Fehler, verworfenen Datensätzen oder beschädigten Ergebnissen führen.

Stattdessen empfiehlt Databricks, immer CREATE OR REPLACE TABLE zu verwenden, wie im folgenden Beispiel:

CREATE OR REPLACE TABLE table_name
AS SELECT * FROM parquet.`/path/to/files`

Da der atomare Ersatz den Tabellenverlauf beibehält, können gleichzeitige Transaktionen die Version der Quelltabelle, auf die sie verweisen, validieren und konkurrierende Transaktionen entweder zum Fehlschlagen bringen oder mit ihnen abgeglichen werden, ohne dass unerwartetes Verhalten auftritt.