Udostępnij za pośrednictwem


Usuwanie lub zastępowanie tabeli delty

Usługa Azure Databricks obsługuje standardowe polecenia DDL SQL służące do usuwania i zastępowania tabel zarejestrowanych w wykazie aparatu Unity lub magazynie metadanych Hive. Ten artykuł zawiera przykłady usuwania i zastępowania tabel delty oraz zaleceń dotyczących składni w zależności od skonfigurowanego środowiska i żądanego wyniku.

Kiedy należy usunąć tabelę

Należy użyć DROP TABLE polecenia , aby usunąć tabelę z magazynu metadanych, gdy chcesz trwale usunąć tabelę i nie ma zamiaru tworzyć nowej tabeli w tej samej lokalizacji. Na przykład:

DROP TABLE table_name

DROP TABLE ma różne semantyki w zależności od typu tabeli i tego, czy tabela jest zarejestrowana w wykazie aparatu Unity, czy w starszym magazynie metadanych Programu Hive.

Typ tabeli Magazyn metadanych Zachowanie
Zarządzana Unity Catalog Tabela jest usuwana z magazynu metadanych, a dane bazowe są oznaczone do usunięcia. Dane w tabelach zarządzanych usługi Unity Catalog można UNDROP wykonywać przez 7 dni.
Zarządzana Hive Tabela zostanie usunięta z magazynu metadanych, a dane bazowe zostaną usunięte.
Zewnętrzne Unity Catalog Tabela jest usuwana z magazynu metadanych, ale dane bazowe pozostają. Uprawnienia dostępu do identyfikatora URI podlegają teraz lokalizacji zewnętrznej zawierającej dane.
Zewnętrzne Hive Tabela jest usuwana z magazynu metadanych, ale dane bazowe pozostają. Wszelkie uprawnienia dostępu do identyfikatora URI są niezmienione.

DROP TABLE semantyka różni się w zależności od typów tabel, a katalog aparatu Unity przechowuje historię tabel delty przy użyciu wewnętrznego identyfikatora tabeli. Jednak wszystkie tabele mają wspólny wynik, że po zakończeniu operacji wcześniej zarejestrowana nazwa tabeli nie ma już aktywnego linku do danych i historii tabel z magazynu metadanych.

Zobacz DROP TABLE.

Uwaga

Usługa Databricks nie zaleca wzorca upuszczania, a następnie ponownego tworzenia tabeli przy użyciu tej samej nazwy dla potoków lub systemów produkcyjnych, ponieważ ten wzorzec może spowodować nieoczekiwane wyniki dla operacji współbieżnych. Zobacz Zastępowanie danych operacjami współbieżnymi.

Kiedy zastąpić tabelę

Usługa Databricks zaleca używanie CREATE OR REPLACE TABLE instrukcji dla przypadków użycia, w których chcesz w pełni zastąpić tabelę docelową nowymi danymi. Na przykład aby zastąpić tabelę delty wszystkimi danymi z katalogu Parquet, można uruchomić następujące polecenie:

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

CREATE OR REPLACE TABLE ma tę samą semantyka niezależnie od typu tabeli lub magazynu metadanych w użyciu. Poniżej przedstawiono ważne zalety programu CREATE OR REPLACE TABLE:

  • Zawartość tabeli jest zastępowana, ale tożsamość tabeli jest zachowywana.
  • Historia tabeli jest zachowywana i można przywrócić tabelę do starszej wersji za RESTORE pomocą polecenia .
  • Operacja jest jedną transakcją, więc nigdy nie ma czasu, gdy tabela nie istnieje.
  • Równoczesne zapytania odczytu z tabeli mogą być kontynuowane bez przerwy. Ponieważ wersja przed i po zastąpieniu nadal istnieje w historii tabeli, zapytania współbieżne mogą odwoływać się do jednej z wersji tabeli w razie potrzeby.

Zobacz CREATE TABLE [USING].

Zastępowanie danych operacjami współbieżnymi

Zawsze, gdy chcesz wykonać pełne zastąpienie danych w tabeli, która może być używana w operacjach współbieżnych, należy użyć polecenia CREATE OR REPLACE TABLE.

Nie należy używać następującego antywzór:

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

Przyczyny tego zalecenia różnią się w zależności od tego, czy używasz tabel zarządzanych, czy zewnętrznych oraz czy używasz wykazu aparatu Unity, ale we wszystkich typach tabel delty używających tego wzorca może spowodować błąd, porzucone rekordy lub uszkodzone wyniki.

Zamiast tego usługa Databricks zaleca zawsze używanie elementu CREATE OR REPLACE TABLE, jak w poniższym przykładzie:

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

Ponieważ historia tabeli jest utrzymywana podczas zastępowania danych niepodzielnych, równoczesne transakcje mogą weryfikować wersję przywoływanej tabeli źródłowej i w związku z tym zakończyć niepowodzeniem lub uzgadnianiem współbieżnych transakcji w razie potrzeby bez wprowadzania nieoczekiwanych zachowań lub wyników.