Suppression des colonnes de table

Vertica Analytics Platform Version 9.2.x Documentation

ALTER TABLE…DROP COLUMN supprime la colonne de table spécifiée et les conteneurs ROS qui correspondent à la colonne supprimée :

ALTER TABLE table DROP column

Une fois l’opération de suppression terminée, les données sauvegardées à partir de l’époque actuelle sont récupérées sans la colonne. Les données récupérées à partir d’une sauvegarde qui précède l’époque actuelle ré-ajoutent la colonne de la table. Étant donné que les opérations de suppression purgent physiquement le stockage d’objets et les définitions de catalogue (historique de la table) de la table, les requêtes AT EPOCH (historiques) ne renvoient rien pour la colonne supprimée.

La table modifiée conserve son ID d’objet.

Les opérations de Drop column peuvent être rapides car ces modifications au niveau du catalogue ne nécessitent pas de réorganisation des données, Vertica peut donc récupérer rapidement le stockage sur disque.

Restrictions

  • Vous ne pouvez pas supprimer ou modifier une colonne de clé primaire ou une colonne qui participe à la clause de partitionnement de table.
  • Vous ne pouvez pas supprimer la première colonne d’un ordre de tri de projection ou de colonnes participant à une expression de segmentation de projection.
  • Tous les nœuds doivent être activés.
  • Vous ne pouvez pas supprimer une colonne associée à une stratégie d’accès. Les tentatives de le faire produisent l’erreur suivante:
    ERROR 6482: Failed to parse Access Policies for table "t1"

Utilisation de la CASCADE pour forcer une chute

Si la colonne de table à supprimer a des dépendances, vous devez qualifier la clause DROP COLUMN avec l’option CASCADE. Par exemple, la colonne cible peut être spécifiée dans un ordre de tri de projection. Dans ce cas et d’autres, DROP COLUMN…CASCADE gère la dépendance en réorganisant les définitions de catalogue ou en supprimant une projection. Dans tous les cas, CASCADE effectue la réorganisation minimale requise pour supprimer la colonne.

Utilisez CASCADE pour supprimer une colonne avec les dépendances suivantes :

Dépendance de colonne abandonnée Comportement en CASCADE

Toute contrainte

Vertica supprime la colonne lorsqu’une contrainte de CLÉ ÉTRANGÈRE dépend d’une contrainte de CLÉ UNIQUE ou PRIMAIRE sur les colonnes référencées.

Spécifié dans l’ordre de tri de projection

Vertica tronque l’ordre de tri de projection jusqu’à et y compris la projection qui est supprimée sans impact sur le stockage physique pour les autres colonnes, puis supprime la colonne spécifiée. Par exemple, si les colonnes d’une projection sont dans l’ordre de tri (a, b, c), la suppression de la colonne b entraîne l’ordre de tri de la projection juste (a), en omettant la colonne (c).

Spécifié dans une expression de segmentation de projection

La colonne à supprimer fait partie intégrante de la définition de projection. Si possible, Vertica supprime la projection tant que cela ne compromet pas la sécurité K; sinon, la transaction est annulée.

Référencé comme valeur par défaut d’une autre colonne

Voir Suppression d’une colonne référencée comme Valeur par défaut, ci-dessous.

Suppression d’une colonne référencée par défaut

Vous pouvez supprimer une colonne de table référencée par une autre colonne comme valeur par défaut. Par exemple, la table suivante est définie avec deux colonnes, a et b:, où b obtient sa valeur par défaut à partir de la colonne a:

=> CREATE TABLE x(a int) UNSEGMENTED ALL NODES; CREATE TABLE=>ALTER TABLE x ADD COLUMN b int DEFAULT a; ALTER TABLE

Dans ce cas, la suppression de la colonne a nécessite la procédure suivante:

  1. Supprimez la dépendance par défaut via ALTER COLUMN..DROP DEFAULT:
    =>ALTER TABLE x ALTER COLUMN b DROP DEFAULT; 
  2. Créez une superprojection de remplacement pour la table cible si l’une ou les deux conditions suivantes sont vraies :
  • La colonne cible est la première colonne de l’ordre de tri de la table. Si la table n’a pas d’ordre de tri explicite, l’ordre de tri de table par défaut spécifie la première colonne de table en tant que première colonne d’ordre de tri. Dans ce cas, la nouvelle superprojection doit spécifier un ordre de tri qui exclut la colonne cible.
  • Si la table est segmentée, la colonne cible est spécifiée dans l’expression de segmentation. Dans ce cas, la nouvelle superprojection doit spécifier une expression de segmentation qui exclut la colonne cible.

Compte tenu de l’exemple précédent, la table x a un ordre de tri par défaut de (a, b). Étant donné que la colonne a est la première colonne de l’ordre de tri de la table, vous devez créer une superprojection de remplacement qui est triée sur la colonne b:

=> CREATE PROJECTION x_p1 as select * FROM x ORDER BY b UNSEGMENTED ALL NODES;

  • Run START_REFRESH:
    => SELECT START_REFRESH(); START_REFRESH---------------------------------------- Starting refresh background process.(1 row)
  • Run MAKE_AHM_NOW:
    => SELECT MAKE_AHM_NOW(); MAKE_AHM_NOW------------------------------- AHM set (New AHM Epoch: 1231)(1 row)
  • Drop the column:
    => ALTER TABLE x DROP COLUMN a CASCADE;
  • Vertica implémente la directive CASCADE comme suit :

    • Supprime la superprojection d’origine pour la table xx_super).
    • Met à jour la superprojection de remplacement x_p1 en supprimant la colonne a.

    Exemples

    La série de commandes suivante supprime avec succès une colonne de type de données OCTEA :

    => CRÉER UNE TABLE t(x OCTEA(65000), y OCTEA, z OCTEA(1)); CREATE TABLE=> ALTER TABLE t DROP COLUMN y;ALTER TABLE=> SELECT y FROM t;ERROR 2624: Column "y" does not exist=> ALTER TABLE t DROP COLUMN x RESTRICT;ALTER TABLE=> SELECT x FROM t;ERROR 2624: Column "x" does not exist=> SELECT * FROM t; z---(0 rows)=> DROP TABLE t CASCADE;DROP TABLE

    La série de commandes suivante essaie de supprimer une colonne FLOAT(8) et échoue car il n’y a pas assez de projections pour maintenir la sécurité K.

    => CRÉER UNE TABLE t(x FLOAT(8), y FLOAT(08)); CRÉER UNE TABLE=> MODIFIER LA TABLE t DÉPOSER LA COLONNE y RESTREINDRE; MODIFIER LA TABLE = > SÉLECTIONNER y À PARTIR DE t; ERREUR 2624: La colonne "y" n'existe pas =>ALTER TABLE t DROP x CASCADE; ROLLBACK 2409: Impossible de supprimer d'autres colonnes dans t=>DROP TABLE t CASCADE;



    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée.