Catégories :

Table, vue et séquence DDL

DROP TABLE

Supprime une table du schéma actuel/spécifié, mais conserve une version de la table afin qu’elle puisse être récupérée en utilisant UNDROP TABLE. Pour plus de détails, voir Notes sur l’utilisation (dans ce chapitre).

Voir aussi :

CREATE TABLE , SHOW TABLES , TRUNCATE TABLE

Syntaxe

DROP TABLE [ IF EXISTS ] <name> [ CASCADE | RESTRICT ]

Paramètres

nom

Indique l’identificateur de la table à détruire. Si l’identificateur contient des espaces, des caractères spéciaux ou des caractères majuscules et minuscules, toute la chaîne doit être délimitée par des guillemets doubles. Les identificateurs entre guillemets doubles sont également sensibles à la casse (p. ex. "My Object").

Si l’identificateur de la table n’est pas complet (sous la forme nom_bd.nom_schéma.nom_table ou nom_schéma.nom_table), la commande recherche la table dans le schéma actuel de la session.

CASCADE | RESTRICT

Indique si la table peut être détruite s’il existe des clés étrangères qui font référence à la table :

  • CASCADE détruit la table même si celle-ci présente des clés primaires/uniques qui sont référencées par des clés étrangères dans d’autres tables.

  • RESTRICT renvoie un avertissement sur les références de clés étrangères existantes et ne détruit pas la table.

Par défaut : CASCADE

Notes sur l’utilisation

  • La destruction d’une table ne la supprime pas définitivement du système. Une version de la table détruite est conservée dans Time Travel pendant le nombre de jours spécifié par le paramètre DATA_RETENTION_TIME_IN_DAYS de la table :

    1. Pendant la période de conservation de Time Travel, une table détruite peut être restaurée à l’aide de la commande UNDROP TABLE.

    2. Lorsque la période de conservation de Time Travel prend fin, l’état suivant de la table détruite dépend de son caractère : permanente, temporaire ou transitoire :

      • Une table permanente se déplace dans Fail-safe. Dans Fail-safe (7 jours), une table détruite peut être récupérée, mais seulement par Snowflake. Lorsque la table quitte Fail-safe, elle est purgée.

      • Une table transitoire ou temporaire n’est associée à aucune période Fail-safe, elle est donc purgée lorsqu’elle dépasse la période Time Travel.

    3. Une fois qu’une table détruite a été purgée, elle ne peut pas être récupérée ; elle doit être recréée.

  • Après la destruction d’une table, la création d’une table portant le même nom crée une nouvelle version de la table. La version détruite de la table précédente peut encore être restaurée en utilisant la méthode suivante :

    1. Renommez la version actuelle de la table sous un nom différent.

    2. Utilisez la commande UNDROP TABLE pour restaurer la version précédente.

  • Avant de détruire une table, vérifiez qu”aucune vue ne lui fait référence. La destruction d’une table référencée par une vue rend non valide la vue (comme interroger la vue renvoie une erreur de type « l’objet n’existe pas »).

  • Pour détruire une table, vous devez utiliser un rôle disposant du privilège de propriété sur la table.

Exemples

Détruire une table :

SHOW TABLES LIKE 't2%';

+---------------------------------+------+---------------+-------------+-----------+------------+------------+------+-------+--------------+----------------+
| created_on                      | name | database_name | schema_name | kind      | comment    | cluster_by | rows | bytes | owner        | retention_time |
|---------------------------------+------+---------------+-------------+-----------+------------+------------+------+-------+--------------+----------------+
| Tue, 17 Mar 2015 16:48:16 -0700 | T2   | TESTDB        | PUBLIC      | TABLE     |            |            |    5 | 4096  | PUBLIC       |              1 |
+---------------------------------+------+---------------+-------------+-----------+------------+------------+------+-------+--------------+----------------+

DROP TABLE t2;

+--------------------------+
| status                   |
|--------------------------|
| T2 successfully dropped. |
+--------------------------+

SHOW TABLES LIKE 't2%';

+------------+------+---------------+-------------+------+---------+------------+------+-------+-------+----------------+
| created_on | name | database_name | schema_name | kind | comment | cluster_by | rows | bytes | owner | retention_time |
|------------+------+---------------+-------------+------+---------+------------+------+-------+-------+----------------|
+------------+------+---------------+-------------+------+---------+------------+------+-------+-------+----------------+

Détruire à nouveau la table, mais ne pas engendrer d’erreur si la table n’existe pas :

DROP TABLE IF EXISTS t2;

+------------------------------------------------------------+
| status                                                     |
|------------------------------------------------------------|
| Drop statement executed successfully (T2 already dropped). |
+------------------------------------------------------------+