Eliminare o sostituire una tabella

Azure Databricks supporta i comandi DDL standard SQL per eliminare e sostituire le tabelle registrate con Unity Catalog o con il metastore Hive. Il comportamento di eliminazione e sostituzione varia in base al tipo di tabella e al metastore. Scegliere il comando corretto per evitare la perdita di dati o gli errori di operazioni simultanee.

Quando eliminare una tabella

Databricks consiglia di usare DROP TABLE per rimuovere una tabella dal metastore quando si vuole eliminare definitivamente la tabella e non si intende creare una nuova tabella nella stessa posizione. Per esempio:

DROP TABLE table_name

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

Tipo di tabella Metastore Behavior
Managed Catalogo Unity La tabella viene rimossa dal metastore e i dati sottostanti sono contrassegnati per l'eliminazione. È possibile UNDROP una tabella gestita entro il periodo di recupero configurato (impostazione predefinita: 7 giorni). Vedere Eliminare una tabella gestita.
Managed Hive La tabella viene rimossa dal metastore e i dati sottostanti vengono eliminati.
External Catalogo Unity La tabella viene rimossa dal metastore, ma i dati sottostanti rimangono. I privilegi di accesso URI sono ora regolati dalla posizione esterna che contiene i dati.
External Hive La tabella viene rimossa dal metastore, ma i dati sottostanti rimangono. Tutti i privilegi di accesso URI sono invariati.

Il catalogo Unity gestisce una cronologia delle tabelle usando un ID tabella interno. Per tutti i tipi di tabella, al termine dell'operazione di eliminazione, il nome della tabella registrato in precedenza non ha più un collegamento attivo ai dati e alla cronologia delle tabelle dal metastore.

Vedete DROP TABLE.

Note

Databricks non consiglia di eliminare e ricreare una tabella usando lo stesso nome per le pipeline o i sistemi di produzione perché ciò può comportare risultati imprevisti per le operazioni simultanee. Vedere Sostituire i dati con operazioni simultanee.

Quando sostituire una tabella

Databricks consiglia di usare istruzioni CREATE OR REPLACE TABLE per i casi d'uso in cui desideri sovrascrivere completamente la tabella di destinazione con nuovi dati. Ad esempio, per sovrascrivere una tabella con tutti i dati di una directory Parquet, 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.
  • Se la tabella originale include le maschere di colonna, tali maschere vengono mantenute per tutte le colonne ancora presenti nella nuova tabella. In questo modo si garantisce che i criteri di accesso ai dati vengano mantenuti.

Visualizza CREATE TABLE [UTILIZZANDO].

Sostituire i dati con operazioni simultanee

Quando 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 dovresti usare il seguente anti-pattern:

DROP TABLE IF EXISTS table_name;

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

Per tutti i tipi di tabella, indipendentemente dal fatto che si usi o meno Unity Catalog, l'uso di questo modello può generare un errore, eliminare record 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 sostituzione atomica preserva la cronologia della tabella, le transazioni concorrenti possono convalidare la versione della tabella di origine a cui fanno riferimento e non andare a buon fine oppure essere riconciliate senza comportamenti imprevisti.