Condividi tramite


Eliminare o sostituire una tabella Delta

Azure Databricks supporta i comandi DDL standard SQL per eliminare e sostituire le tabelle registrate con Unity Catalog o con il metastore Hive. Questo articolo fornisce esempi di eliminazione e sostituzione di tabelle Delta e consigli per la sintassi a seconda dell'ambiente configurato e del risultato desiderato.

Quando eliminare una tabella

È consigliabile usare DROP TABLE per rimuovere una tabella dal metastore quando si desidera eliminare definitivamente la tabella e non si intende creare una nuova tabella nella stessa posizione. Ad esempio:

DROP TABLE table_name

DROP TABLE ha una semantica diversa a seconda del tipo di tabella e se la tabella è registrata nel catalogo Unity o nel metastore Hive legacy.

Tipo di tabella Metastore Comportamento
Gestito Catalogo Unity La tabella viene rimossa dal metastore e i dati sottostanti sono contrassegnati per l'eliminazione. È possibile UNDROP usare i dati nelle tabelle gestite di Unity Catalog per 7 giorni.
Gestito Hive La tabella viene rimossa dal metastore e i dati sottostanti vengono eliminati.
Esterno Catalogo Unity La tabella viene rimossa dal metastore, ma i dati sottostanti rimangono. I privilegi di accesso URI sono ora regolati dal percorso esterno che contiene i dati.
Esterno Hive La tabella viene rimossa dal metastore, ma i dati sottostanti rimangono. Tutti i privilegi di accesso URI sono invariati.

DROP TABLE la semantica differisce tra i tipi di tabella e Il catalogo Unity gestisce una cronologia delle tabelle Delta usando un ID tabella interno. Tuttavia, tutte le tabelle condividono il risultato comune che dopo il completamento dell'operazione, il nome della tabella registrato in precedenza non ha più un collegamento attivo ai dati e alla cronologia delle tabelle dal metastore.

Vedere DROP TABLE.

Nota

Databricks non consiglia il modello di eliminazione e quindi la ricreazione di una tabella con lo stesso nome per pipeline o sistemi di produzione, in quanto questo modello può comportare risultati imprevisti per le operazioni simultanee. Vedere Sostituire i dati con operazioni simultanee.

Quando sostituire una tabella

Databricks consiglia di usare CREATE OR REPLACE TABLE istruzioni per i casi d'uso in cui si vuole sovrascrivere completamente la tabella di destinazione con nuovi dati. Ad esempio, per sovrascrivere una tabella Delta con tutti i dati di una directory Parquet, è possibile eseguire il comando seguente:

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

CREATE OR REPLACE TABLE ha la stessa semantica indipendentemente dal tipo di tabella o dal metastore in uso. Di seguito sono riportati i vantaggi importanti di CREATE OR REPLACE TABLE:

  • Il contenuto del sommario viene sostituito, ma l'identità della tabella viene mantenuta.
  • La cronologia delle tabelle viene mantenuta ed è possibile ripristinare la tabella in una versione precedente con il RESTORE comando .
  • L'operazione è una singola transazione, quindi non esiste mai un'ora in cui la tabella non esiste.
  • Le query simultanee che leggono dalla tabella possono continuare senza interruzioni. Poiché la versione precedente e successiva alla sostituzione esiste ancora nella cronologia delle tabelle, le query simultanee possono fare riferimento a una delle due versioni della tabella in base alle esigenze.

Vedere CREATE TABLE [USING].

Sostituire i dati con operazioni simultanee

Ogni volta che si desidera eseguire una sostituzione completa dei dati in una tabella che potrebbe essere usata nelle operazioni simultanee, è necessario usare CREATE OR REPLACE TABLE.

Non è consigliabile usare il modello anti-pattern seguente:

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

I motivi di questa raccomandazione variano a seconda che si usino tabelle gestite o esterne e che si usi il catalogo Unity, ma in tutti i tipi di tabella Delta che usano questo modello può verificarsi un errore, record eliminati o risultati danneggiati.

Databricks consiglia invece di usare CREATE OR REPLACE TABLEsempre , come nell'esempio seguente:

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

Poiché la cronologia delle tabelle viene mantenuta durante la sostituzione dei dati atomici, le transazioni simultanee possono convalidare la versione della tabella di origine a cui viene fatto riferimento e quindi non riuscire o riconciliare le transazioni simultanee in base alle esigenze senza introdurre comportamenti o risultati imprevisti.