Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
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. Le comportement de suppression et de remplacement diffère selon le type de table et le metastore. Choisissez la commande appropriée pour éviter la perte de données ou les échecs d’opération simultanées.
Quand supprimer une table
Databricks vous recommande d’utiliser DROP TABLE pour retirer une table du metastore lorsque vous souhaitez 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 des comportements différents selon le type de table et si la table est inscrite dans le catalogue Unity ou dans le metastore Hive hérité.
| Type de tableau | Metastore | Comportement |
|---|---|---|
| Managed | Unity Catalog | La table est supprimée du metastore et les données sous-jacentes sont marquées pour suppression. Vous pouvez UNDROP utiliser une table gérée au cours de la période de récupération configurée (7 jours par défaut). Consultez Supprimer une table managée. |
| Managed | Hive | La table est supprimée du metastore et les données sous-jacentes sont supprimées. |
| External | 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. |
| External | 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. |
Unity Catalog gère 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 la table précédemment inscrit n’a plus de lien actif vers les données et l’historique des tables à partir du metastore.
Voir DROP TABLE.
Note
Databricks ne vous recommande pas de supprimer et de recréer une table à l’aide du même nom pour les pipelines de production ou les systèmes, car cela peut entraîner 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 avec toutes les données d’un répertoire Parquet, exécutez 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 une transaction unique. 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.
- Si le tableau d’origine incluait des masques de colonne, ces masques sont conservés pour toutes les colonnes qui existent toujours dans la nouvelle table. Cela garantit que les stratégies d’accès aux données sont conservées.
Consultez CREATE TABLE [USING].
Remplacer des données faisant l’objet d’opérations simultanées
Lorsque vous souhaitez effectuer un remplacement complet des données d’une table qui peut être utilisée dans les opérations simultanées, vous devez utiliser CREATE OR REPLACE TABLE.
Vous ne devriez pas utiliser l’anti-pattern suivant :
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 modèle peut entraîner une erreur, des enregistrements supprimés ou des résultats endommagés.
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`
Étant donné que le remplacement atomique conserve l’historique des tables, les transactions simultanées peuvent valider la version de la table source qu’elles référencent et échouent ou rapprochent les transactions simultanées sans comportement inattendu.