Sdílet prostřednictvím


Odstranění nebo nahrazení tabulky Delta

Azure Databricks podporuje standardní příkazy DDL SQL pro vyřazení a nahrazování tabulek registrovaných pomocí katalogu Unity nebo metastoru Hive. Tento článek obsahuje příklady vyřazení a nahrazení tabulek Delta a doporučení pro syntaxi v závislosti na nakonfigurovaném prostředí a požadovaném výsledku.

Kdy umístit tabulku

Tabulku byste měli použít DROP TABLE k odebrání z metastoru, pokud chcete tabulku trvale odstranit a nemáte v úmyslu vytvořit novou tabulku ve stejném umístění. Příklad:

DROP TABLE table_name

DROP TABLE má různé sémantiky v závislosti na typu tabulky a na tom, jestli je tabulka zaregistrovaná v katalogu Unity nebo ve starší verzi metastoru Hive.

Typ tabulky Metastore Chování
Spravované Katalog Unity Tabulka se odebere z metastoru a podkladová data se označí k odstranění. Data můžete UNDROP ve spravovaných tabulkách Unity Catalog provádět po dobu 7 dnů.
Spravované Hive Tabulka se odebere z metastoru a podkladová data se odstraní.
Externí Katalog Unity Tabulka se odebere z metastoru, ale podkladová data zůstanou. Přístupová oprávnění URI se teď řídí externím umístěním, které obsahuje data.
Externí Hive Tabulka se odebere z metastoru, ale podkladová data zůstanou. Všechna přístupová oprávnění URI se nemění.

DROP TABLE sémantika se liší v různých typech tabulek a Katalog Unity udržuje historii tabulek Delta pomocí interního ID tabulky. Všechny tabulky ale sdílejí společný výsledek, že po dokončení operace už název dříve registrované tabulky nemá aktivní odkaz na data a historii tabulek z metastoru.

Viz DROP TABLE.

Poznámka:

Databricks nedoporučuje způsob vyřazení a následného vytvoření tabulky se stejným názvem pro produkční kanály nebo systémy, protože tento model může vést k neočekávaným výsledkům souběžných operací. Viz Nahrazení dat souběžnými operacemi.

Kdy nahradit tabulku

Databricks doporučuje používat CREATE OR REPLACE TABLE příkazy pro případy použití, kdy chcete plně přepsat cílovou tabulku novými daty. Pokud chcete například přepsat tabulku Delta všemi daty z adresáře Parquet, můžete spustit následující příkaz:

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

CREATE OR REPLACE TABLE má stejnou sémantiku bez ohledu na typ tabulky nebo metastor používané. Následující výhody jsou důležité CREATE OR REPLACE TABLE:

  • Obsah tabulky se nahradí, ale identita tabulky se zachová.
  • Historie tabulek je zachována a pomocí příkazu můžete vrátit tabulku k dřívější verzi RESTORE .
  • Operace je jedna transakce, takže neexistuje čas, kdy tabulka neexistuje.
  • Souběžné dotazy čtené z tabulky můžou pokračovat bez přerušení. Vzhledem k tomu, že verze před a po nahrazení stále existuje v historii tabulek, souběžné dotazy mohou podle potřeby odkazovat na některou verzi tabulky.

Viz CREATE TABLE [USING].

Nahrazení dat souběžnými operacemi

Kdykoli chcete provést úplnou náhradu dat v tabulce, která se může použít v souběžných operacích, musíte použít CREATE OR REPLACE TABLE.

Neměli byste použít následující anti-pattern:

-- This is an anti-pattern. Avoid doing this!
DROP TABLE IF EXISTS table_name;

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

Důvody tohoto doporučení se liší v závislosti na tom, jestli používáte spravované nebo externí tabulky a jestli používáte Katalog Unity, ale u všech typů tabulek Delta, které používají tento model, může dojít k chybě, vyřazení záznamů nebo poškození výsledků.

Místo toho Databricks doporučuje vždy používat CREATE OR REPLACE TABLE, jako v následujícím příkladu:

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

Vzhledem k tomu, že historie tabulek se udržuje během nahrazení atomických dat, mohou souběžné transakce ověřit verzi odkazované zdrojové tabulky, a proto podle potřeby selžou nebo odsouhlasí souběžné transakce bez zavedení neočekávaného chování nebo výsledků.