Scăderea coloanelor tabelului

Vertica Analytics Platform versiunea 9.2.X documentație

ALTER TABLE…DROP COLUMNscade coloana de tabel specificată și containerele ros care corespund coloanei abandonate:

Alter Table Table drop column 

după finalizarea operației de cădere, datele salvate din epoca curentă se recuperează fără coloană. Datele recuperate dintr-o copie de rezervă care precede Epoca curentă re-adăugați coloana tabelului. Deoarece operațiunile de cădere elimină fizic stocarea obiectelor și definițiile catalogului (Istoricul tabelului) din tabel, AT EPOCH (istoric) interogările nu returnează nimic pentru coloana abandonată.

tabelul modificat își păstrează ID-ul obiectului.

operațiunile coloanei de cădere pot fi rapide, deoarece aceste modificări la nivel de catalog nu necesită reorganizarea datelor, astfel încât Vertica poate recupera rapid stocarea pe disc.

restricții

  • nu puteți renunța sau modifica o coloană cheie primară sau o coloană care participă la Clauza de partiționare a tabelului.
  • nu puteți renunța la prima coloană din orice ordine de sortare a proiecției sau la coloanele care participă la o expresie de segmentare a proiecției.
  • toate nodurile trebuie să fie sus.
  • nu puteți renunța la o coloană asociată cu o politică de acces. Încercările de a face acest lucru produc următoarea eroare:
    ERROR 6482: Failed to parse Access Policies for table "t1"

utilizarea cascadei pentru a forța o picătură

dacă coloana tabelului de drop are dependențe, trebuie să calificați clauzaDROP COLUMN cu opțiuneaCASCADE. De exemplu, coloana țintă poate fi specificată într-o ordine de sortare a proiecției. În acest caz și în alte cazuri,DROP COLUMN…CASCADE gestionează dependența reorganizând definițiile catalogului sau renunțând la o proiecție. În toate cazurile,CASCADE efectuează reorganizarea minimă necesară pentru a renunța la coloană.

utilizați CASCADE pentru a renunța la o coloană cu următoarele dependențe:

dependență de coloană abandonată comportament în cascadă

orice constrângere

Vertica scade coloana atunci când o constrângere cheie străină depinde de o constrângere cheie unică sau primară pe coloanele de referință.

specificat în ordinea de sortare a proiecției

Vertica trunchiază ordinea de sortare a proiecției până la și inclusiv proiecția care este abandonată fără impact asupra stocării fizice pentru alte coloane și apoi scade coloana specificată. De exemplu, dacă coloanele unei proiecții sunt în ordine de sortare (a,b, c), scăderea coloanei b face ca ordinea de sortare a proiecției să fie doar (a), omițând coloana (c).

specificat într-o expresie de segmentare a proiecției

coloana care trebuie aruncată este parte integrantă a definiției proiecției. Dacă este posibil, Vertica renunță la proiecție atâta timp cât acest lucru nu compromite siguranța K; în caz contrar, tranzacția revine.

referită ca valoare implicită a unei alte coloane

a se vedea scăderea unei coloane la care se face referire ca implicită, mai jos.

abandonarea unei coloane la care se face referire ca implicit

s-ar putea să doriți să renunțați la o coloană de tabel la care se face referire de o altă coloană ca valoare implicită. De exemplu, următorul tabel este definit cu două coloane, a și b:, unde b își obține valoarea implicită din coloana a:

=> creare tabel X (a int) toate nodurile nesegmentate;Creare tabel=> modificare tabel x Adăugare coloană B int implicit a;modificare tabel

în acest caz, scăderea coloanei a necesită următoarea procedură:

  1. eliminați dependența implicită prinALTER COLUMN..DROP DEFAULT:
    => ALTER TABLE X ALTER COLUMN B DROP DEFAULT;
  2. creați o superproiecție de înlocuire pentru tabelul țintă dacă una sau ambele dintre următoarele condiții sunt adevărate:
  • coloana țintă este prima coloană de ordine de sortare a tabelului. Dacă tabelul nu are o ordine de sortare explicită, ordinea de sortare implicită a tabelului specifică prima coloană de tabel ca prima coloană de ordine de sortare. În acest caz, noua superproiecție trebuie să specifice o ordine de sortare care exclude coloana țintă.
  • dacă tabelul este segmentat, coloana țintă este specificată în expresia de segmentare. În acest caz, noua superproiecție trebuie să specifice o expresie de segmentare care exclude coloana țintă.

având în vedere exemplul anterior, tabelulx are o ordine de sortare implicită a (A,b). Deoarece coloana a este prima coloană de ordine de sortare a tabelului, trebuie să creați o superproiecție de înlocuire care este sortată pe coloana 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 implementează DirectivaCASCADE după cum urmează:

    • renunță la superproiectarea originală pentru tabelulxx_super).
    • actualizează superproiecția de înlocuirex_p1 prin scăderea coloaneia.

    Exemple

    următoarea serie de comenzi scade cu succes o coloană de tip de date BYTEA:

     => creați tabelul t (X BYTEA (65000), y BYTEA, z BYTEA(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 

    următoarea serie de comenzi încearcă să renunțe la o coloană FLOAT(8) și eșuează, deoarece nu există suficiente proiecții pentru a menține K-siguranță.

    => crearea tabelului t (X FLOAT(8),y FLOAT(08));crearea tabelului=> ALTER TABLE t DROP COLUMN y RESTRICT;ALTER TABLE=> selectați Y din t;eroare 2624: coloana "y" nu există=> ALTER TABLE t drop x cascade;rollback 2409: nu se mai pot arunca coloane în T=> drop table t cascade;



    Lasă un răspuns

    Adresa ta de email nu va fi publicată.