Supprimer ou remplacer une table Delta

Azure Databricks prend en charge les commandes DDL standard SQL pour supprimer et remplacer les tables inscrites auprès de Unity Catalog ou du metastore Hive. Cet article fournit des exemples de suppression et de remplacement de tables Delta, et des recommandations pour la syntaxe en fonction de votre environnement configuré et du résultat souhaité.

Quand supprimer une table

Vous devez utiliser DROP TABLE pour supprimer une table du metastore lorsque vous voulez supprimer définitivement la table et que vous n’avez pas l’intention de créer une nouvelle table au même emplacement. Par exemple :

DROP TABLE table_name

DROP TABLE a une sémantique différente selon le type de table et le fait que la table est inscrite dans Unity Catalog ou dans le metastore Hive hérité.

Type de la table Metastore Comportement
Gérée Unity Catalog La table est supprimée du metastore et les données sous-jacentes sont marquées pour suppression. Vous pouvez effectuer une opération UNDROP sur les données des tables gérées par Unity Catalog pendant 7 jours.
Gérée Hive La table est supprimée du metastore et les données sous-jacentes sont supprimées.
Externe Unity Catalog La table est supprimée du metastore mais les données sous-jacentes restent présentes. Les privilèges d’accès à l’URI sont désormais régis par l’emplacement externe qui contient les données.
Externe Hive La table est supprimée du metastore mais les données sous-jacentes restent présentes. Les privilèges d’accès à l’URI sont inchangés.

La sémantique de DROP TABLE diffère selon les types de tables, et Unity Catalog gère un historique des tables Delta en utilisant un ID de table interne. Cependant, toutes les tables ont en commun le fait qu’une fois l’opération effectuée, le nom de la table précédemment inscrite n’a plus de lien actif avec l’historique des données et des tables du metastore.

Voir DROP TABLE.

Remarque

Databricks ne recommande pas le modèle consistant à supprimer puis à recréer une table en utilisant le même nom pour les pipelines ou les systèmes de production, car ce modèle peut aboutir à des résultats inattendus pour les opérations simultanées. Consultez Remplacer des données faisant l’objet d’opérations simultanées.

Quand remplacer une table

Databricks recommande d’utiliser des instructions CREATE OR REPLACE TABLE pour les cas d’usage où vous voulez remplacer entièrement la table cible par de nouvelles données. Par exemple, pour remplacer une table Delta par toutes les données d’un répertoire Parquet, vous pouvez exécuter la commande suivante :

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

CREATE OR REPLACE TABLE a la même sémantique, quel que soit le type de table ou le metastore utilisé. Voici les avantages importants de CREATE OR REPLACE TABLE :

  • Les contenus des tables sont remplacés, mais l’identité de la table est conservée.
  • L’historique des tables est conservé et vous pouvez rétablir la table à une version antérieure avec la commande RESTORE.
  • L’opération est effectuée en une seule transaction : il n’y a donc jamais de moment où la table n’existe pas.
  • Les requêtes simultanées lisant dans la table peuvent continuer sans interruption. Comme la version avant et après remplacement existe toujours dans l’historique des tables, les requêtes simultanées peuvent référencer si nécessaire l’une ou l’autre version de la table.

Consultez CREATE TABLE [USING].

Remplacer des données faisant l’objet d’opérations simultanées

Chaque fois que vous voulez effectuer un remplacement complet des données d’une table susceptible d’être utilisée dans des opérations simultanées, vous devez utiliser CREATE OR REPLACE TABLE.

L’anti-modèle suivant ne doit pas être utilisé :

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

Les raisons de cette recommandation varient selon que vous utilisez des tables managées ou des tables externes, et que vous utilisez ou non Unity Catalog, mais pour tous les types de tables Delta, l’utilisation de ce modèle peut entraîner une erreur, des enregistrements supprimés ou des résultats incorrects.

Databricks recommande toujours d’utiliser à la place CREATE OR REPLACE TABLE, comme dans l’exemple suivant :

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

Comme l’historique des tables est conservé pendant le remplacement des données atomiques, les transactions simultanées peuvent valider la version de la table source référencée, et donc faire échouer ou réconcilier des transactions simultanées sans introduire de comportement ou de résultats inattendus.