Löschen von Tabellenspalten

Vertica Analytics Platform Version 9.2.x Dokumentation

ALTER TABLE…DROP COLUMN löscht die angegebene Tabellenspalte und die ROS-Container, die der gelöschten Spalte entsprechen:

ALTER TABLE table DROP column 

Nach Abschluss des Löschvorgangs werden Daten, die ab der aktuellen Epoche gesichert wurden, ohne die Spalte wiederhergestellt. Daten aus einer Sicherung wiederhergestellt, die der aktuellen Epoche vorausgeht Fügen Sie die Tabellenspalte erneut hinzu. Da Drop-Operationen Objektspeicher- und Katalogdefinitionen (Tabellenverlauf) physisch aus der Tabelle löschen, AT EPOCH (historische) Abfragen geben nichts für die gelöschte Spalte zurück.

Die geänderte Tabelle behält ihre Objekt-ID bei.

Drop-Spaltenoperationen können schnell sein, da diese Änderungen auf Katalogebene keine Datenreorganisation erfordern, sodass Vertica schnell Festplattenspeicher zurückfordern kann.

Einschränkungen

  • Sie können eine Primärschlüsselspalte oder eine Spalte, die an der Tabellenpartitionierungsklausel beteiligt ist, nicht löschen oder ändern.
  • Sie können die erste Spalte einer Projektionssortierreihenfolge oder Spalten, die an einem Projektionssegmentierungsausdruck teilnehmen, nicht löschen.
  • Alle Knoten müssen aktiv sein.
  • Sie können eine Spalte, die einer Zugriffsrichtlinie zugeordnet ist, nicht löschen. Versuche, dies zu tun, erzeugen den folgenden Fehler:
    ERROR 6482: Failed to parse Access Policies for table "t1"

CASCADE verwenden, um einen Drop zu erzwingen

Wenn die zu löschende Tabellenspalte Abhängigkeiten aufweist, müssen Sie die DROP COLUMN -Klausel mit der CASCADE -Option qualifizieren. Beispielsweise kann die Zielspalte in einer Projektionssortierreihenfolge angegeben werden. In diesem und anderen Fällen behandelt DROP COLUMN…CASCADE die Abhängigkeit, indem Katalogdefinitionen neu organisiert oder eine Projektion gelöscht wird. In allen Fällen führt CASCADE die minimale Reorganisation durch, die zum Löschen der Spalte erforderlich ist.

Verwenden Sie CASCADE, um eine Spalte mit den folgenden Abhängigkeiten zu löschen:

Spaltenabhängigkeit gelöscht Kaskadenverhalten

Jede Einschränkung

Vertica löscht die Spalte, wenn eine Fremdschlüsseleinschränkung von einer EINDEUTIGEN oder Primärschlüsseleinschränkung für die referenzierten Spalten abhängt.

In Projektionssortierreihenfolge angegeben

Vertica schneidet die Projektionssortierreihenfolge bis einschließlich der Projektion ab, die ohne Auswirkungen auf den physischen Speicher für andere Spalten gelöscht wird, und löscht dann die angegebene Spalte. Wenn sich beispielsweise die Spalten einer Projektion in der Sortierreihenfolge (a, b, c) befinden, führt das Löschen von Spalte b dazu, dass die Sortierreihenfolge der Projektion nur (a) ist und Spalte (c) weggelassen wird.

In einem Projektionssegmentierungsausdruck angegeben

Die zu löschende Spalte ist integraler Bestandteil der Projektionsdefinition. Wenn möglich, lässt Vertica die Projektion fallen, solange dadurch die K-Sicherheit nicht beeinträchtigt wird.

Als Standardwert einer anderen Spalte referenziert

Siehe Löschen einer als Standard referenzierten Spalte unten.

Löschen einer als Standard referenzierten Spalte

Möglicherweise möchten Sie eine Tabellenspalte löschen, auf die eine andere Spalte als Standardwert verweist. Die folgende Tabelle ist beispielsweise mit zwei Spalten definiert: a und b:, wobei b seinen Standardwert aus der Spalte a :

=> CREATE TABLE x (a int) UNSEGMENTIERT ALLE KNOTEN;CREATE TABLE=> ALTER TABLE x ADD COLUMN b int DEFAULT a;ALTER TABLE

In diesem Fall erfordert das Löschen der Spalte a die folgende Prozedur:

  1. Entfernen Sie die Standardabhängigkeit durch ALTER COLUMN..DROP DEFAULT:
    => ALTER TABLE x ALTER COLUMN b DROP DEFAULT;
  2. Erstellen Sie eine Ersatz-Superprojektion für die Zieltabelle, wenn eine oder beide der folgenden Bedingungen zutrifft:
  • Die Zielspalte ist die erste Sortierreihenfolgenspalte der Tabelle. Wenn die Tabelle keine explizite Sortierreihenfolge hat, gibt die standardmäßige Tabellensortierreihenfolge die erste Tabellenspalte als erste Sortierreihenfolgenspalte an. In diesem Fall muss die neue Superprojektion eine Sortierreihenfolge angeben, die die Zielspalte ausschließt.
  • Wenn die Tabelle segmentiert ist, wird die Zielspalte im Segmentierungsausdruck angegeben. In diesem Fall muss die neue Superprojektion einen Segmentierungsausdruck angeben, der die Zielspalte ausschließt.

Im vorherigen Beispiel hat table x eine Standardsortierreihenfolge von (a,b) . Da column a die erste Sortierreihenfolgenspalte der Tabelle ist, müssen Sie eine Ersatz-Superprojektion erstellen, die nach column 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 implementiert die Direktive CASCADE wie folgt:

    • Löscht die ursprüngliche Superprojektion für die Tabelle xx_super).
    • Aktualisiert die Ersetzungs-Superprojektion x_p1, indem die Spalte a gelöscht wird.

    Beispiele

    Die folgende Reihe von Befehlen löscht erfolgreich eine BYTEA-Datentypspalte:

    => CREATE TABLE 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

    Die folgende Befehlsreihe versucht, eine FLOAT(8) -Spalte zu löschen, und schlägt fehl, da nicht genügend Projektionen vorhanden sind, um die K-Sicherheit aufrechtzuerhalten.

    => TABELLE ERSTELLEN t (x FLOAT(8),y FLOAT(08));TABELLE ERSTELLEN=> ALTER TABLE t DROP COLUMN y RESTRICT;ALTER TABLE=> WÄHLEN SIE y AUS t;FEHLER 2624: Spalte "y" nicht vorhanden=> ALTER TABLE t DROP x CASCADE;ROLLBACK 2409: Es können keine weiteren Spalten in t=> DROP TABLE t CASCADE;



    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht.