Usuwanie kolumn tabeli

platforma analityczna Vertica Wersja 9.2.x dokumentacja

ALTER TABLE…DROP COLUMN upuszcza podaną kolumnę tabeli i kontenery ros odpowiadające opuszczonej kolumnie:

ALTER TABLE table drop column

po zakończeniu operacji upuszczania dane z bieżącej epoki są odzyskiwane bez kolumny. Dane odzyskane z kopii zapasowej poprzedzającej bieżącą epokę ponownie dodaj kolumnę tabeli. Ponieważ operacje upuszczania fizycznie usuwają z tabeli pamięć obiektów i definicje katalogów (historia tabel), AT EPOCH (historyczne) zapytania nie zwracają nic dla opuszczonej kolumny.

zmieniona tabela zachowuje swój identyfikator obiektu.

operacje na kolumnach spadowych mogą być szybkie, ponieważ zmiany na poziomie katalogów nie wymagają reorganizacji danych, więc Vertica może szybko odzyskać pamięć dyskową.

ograniczenia

  • nie można upuścić ani zmienić kolumny klucza podstawowego ani kolumny, która uczestniczy w klauzuli partycjonowania tabeli.
  • nie można upuścić pierwszej kolumny dowolnej kolejności sortowania projekcji ani kolumn, które uczestniczą w wyrażeniu segmentacji projekcji.
  • wszystkie węzły muszą być włączone.
  • nie można upuścić kolumny powiązanej z Polityką dostępu. Próby zrobienia tego powodują następujący błąd:
    ERROR 6482: Failed to parse Access Policies for table "t1"

używając kaskady, aby wymusić spadek

jeśli kolumna tabeli do spadku ma zależności, musisz zakwalifikowaćDROP COLUMN klauzulę z opcjąCASCADE. Na przykład kolumna docelowa może być określona w kolejności sortowania projekcji. W tym i innych przypadkach DROP COLUMN…CASCADE obsługuje zależność poprzez reorganizację definicji katalogu lub odrzucenie projekcji. We wszystkich przypadkach CASCADE przeprowadza minimalną reorganizację wymaganą do opuszczenia kolumny.

użyjCASCADE aby upuścić kolumnę z następującymi zależnościami:

upuszczona zależność kolumny zachowanie kaskadowe

dowolne ograniczenie

Vertica upuszcza kolumnę, gdy ograniczenie klucza obcego zależy od ograniczenia klucza unikalnego lub podstawowego dla odwołujących się kolumn.

określony w kolejności sortowania projekcji

Vertica skraca kolejność sortowania projekcji do rzutu włącznie, który jest upuszczany bez wpływu na fizyczne przechowywanie innych kolumn, a następnie upuszcza określoną kolumnę. Na przykład,jeśli kolumny projekcji są w porządku sortowania (a,b, c), upuszczenie kolumny b powoduje, że kolejność sortowania projekcji jest po prostu (a), pomijając kolumnę (c).

określona w wyrażeniu segmentacji projekcji

kolumna do spadku jest integralną częścią definicji projekcji. Jeśli to możliwe, Vertica rezygnuje z projekcji, o ile nie narusza to K-safety; w przeciwnym razie transakcja się wycofuje.

odwołuje się jako domyślna wartość innej kolumny

Zobacz upuszczanie kolumny odwołującej się jako domyślna, poniżej.

upuszczanie kolumny, do której odwołuje się jako domyślna

możesz chcieć upuścić kolumnę tabeli, do której odwołuje się inna kolumna jako jej domyślna wartość. Na przykład poniższa tabela jest zdefiniowana z dwiema kolumnami, a I b:, gdzie b pobiera domyślną wartość z kolumny a:

=> CREATE TABLE x (A int) unsegmented all nodes;create table=> ALTER TABLE x add column B int default a;ALTER TABLE

w tym przypadku upuszczenie kolumny a wymaga następującej procedury:

  1. Usuń domyślną zależność poprzezALTER COLUMN..DROP DEFAULT:
    => ALTER TABLE X ALTER COLUMN B DROP DEFAULT;
  2. Utwórz zastępczą superprojekcję dla tabeli docelowej, jeśli jeden lub oba poniższe warunki są prawdziwe:
  • kolumna docelowa jest pierwszą kolumną kolejności sortowania tabeli. Jeśli tabela nie ma jawnej kolejności sortowania, domyślna kolejność sortowania tabeli określa pierwszą kolumnę tabeli jako pierwszą kolumnę kolejności sortowania. W tym przypadku Nowa superprojekcja musi określać kolejność sortowania, która wyklucza kolumnę docelową.
  • jeśli tabela jest segmentowana, w wyrażeniu segmentacja jest określona kolumna docelowa. W takim przypadku Nowa superprojekcja musi określać wyrażenie segmentacji, które wyklucza kolumnę docelową.

w poprzednim przykładzie tabelax ma domyślną kolejność sortowania (a, b). Ponieważ kolumna a jest pierwszą kolumną w tabeli, należy utworzyć zastępczą superprojekcję, która jest posortowana w kolumnie 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 implementuje dyrektywęCASCADE w następujący sposób:

    • upuszcza oryginalną superprojekcję dla tabelixx_super).
    • aktualizuje zastępczą superprojekcjęx_p1, upuszczając kolumnęa.

    przykłady

    następujące serie poleceń pomyślnie upuszczają kolumnę typu danych BYTEA:

    = > Utwórz tabelę 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;Upuść tabelę

    następująca seria poleceń próbuje upuścić kolumnę FLOAT(8) i kończy się niepowodzeniem, ponieważ nie ma wystarczającej liczby wystąpień, aby utrzymać K-safety.

    => CREATE TABLE t (x FLOAT(8),y FLOAT(08));CREATE TABLE=> ALTER TABLE t DROP COLUMN y RESTRICT;ALTER TABLE=> SELECT y FROM T;błąd 2624: column "y" does not exist=> ALTER TABLE t drop x Cascade;rollback 2409: cannot drop any more columns in t=> drop table t Cascade;



    Dodaj komentarz

    Twój adres e-mail nie zostanie opublikowany.