Aller au contenu principal

Supprimer ou remplacer une table

Databricks prend en charge les commandes DDL standard SQL pour la suppression et le remplacement des tables enregistrées auprès de Unity Catalog ou du Hive metastore. Le comportement de suppression et de remplacement diffère selon le type de table et le metastore. Choisissez la bonne commande pour éviter la perte de données ou les échecs d'opérations simultanées.

Quand supprimer une table

Databricks vous recommande d'utiliser DROP TABLE pour supprimer une table du metastore lorsque vous souhaitez supprimer définitivement la table et n'avez pas l'intention de créer une nouvelle table au même emplacement. Par exemple :

SQL
DROP TABLE table_name

DROP TABLE présente des comportements différents en fonction du type de table et si la table est enregistrée dans Unity Catalog ou le Hive metastore hérité.

Type de table

Métastore

Comportement

Géré

Unity Catalog

La table est supprimée du métastore et les données sous-jacentes sont marquées pour suppression. Vous pouvez UNDROP une table gérée dans la période de récupération configurée (default 7 jours). Voir Supprimer une table gérée.

Géré

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. Les privilèges d’accès 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. Tous les privilèges d'accès URI restent inchangés.

Type de table

Métastore

Comportement

Géré

Unity Catalog

La table est supprimée du métastore et les données sous-jacentes sont marquées pour suppression. Vous pouvez UNDROP une table gérée dans la période de récupération configurée (default 7 jours). Voir Supprimer une table gérée.

Géré

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. Les privilèges d’accès 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. Tous les privilèges d'accès URI restent inchangés.

Unity Catalog conserve un historique des tables à l'aide d'un ID de table interne. Pour tous les types de tables, une fois l'opération de suppression terminée, le nom de table précédemment enregistré n'a plus de Link actif vers les données et l'historique de la table depuis le métastore.

See DROP TABLE.

remarque

Databricks ne recommande pas de supprimer puis de recréer une table en utilisant le même nom pour les pipelines ou systèmes de production, car cela peut entraîner des résultats inattendus pour les opérations concurrentes. Voir Remplacer les données par des Opérations simultanées.

Quand remplacer une table

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

SQL
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:

  • Le contenu de la table est remplacé, mais l'identité de la table est maintenue.
  • L'historique de la table est conservé, et vous pouvez restaurer la table à une version antérieure avec la commande RESTORE.
  • L'opération est une transaction unique, il n'y a donc jamais de moment où la table n'existe pas.
  • Les queries concurrentes lisant la table peuvent continuer sans interruption. Étant donné que la version avant et après le remplacement existe toujours dans l'historique de la table, les queries simultanées peuvent faire référence à l'une ou l'autre version de la table selon les besoins.
  • Si la table d’origine comprenait des masques de colonne, ces masques sont conservés pour toutes les colonnes qui existent toujours dans la nouvelle table. Cela garantit la préservation des politiques d’accès aux données.

Voir CREATE TABLE [USING].

Remplacer les données avec des opérations simultanées

Lorsque vous souhaitez effectuer un remplacement complet des données dans une table qui pourrait être utilisée dans des Opérations concurrentes, vous devez utiliser CREATE OR REPLACE TABLE.

Vous ne devriez pas utiliser l'anti-modèle suivant :

SQL
DROP TABLE IF EXISTS table_name;

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

Pour tous les types de tables, que vous utilisiez ou non Unity Catalog, l’utilisation de ce schéma peut entraîner une erreur, des enregistrements perdus ou des résultats corrompus.

Databricks recommande plutôt d'utiliser systématiquement CREATE OR REPLACE TABLE, comme dans l'exemple suivant :

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

Étant donné que le remplacement atomique préserve l'historique des tables, les transactions concurrentes peuvent valider la version de la table source à laquelle elles font référence et échouer ou concilier les transactions concurrentes sans comportement inattendu.