A táblázat oszlopainak ledobása

Vertica Analytics Platform 9.2-es verziója.X dokumentáció

ALTER TABLE…DROP COLUMNledobja a megadott táblázatoszlopot és az eldobott oszlopnak megfelelő ros tárolókat:

 Alter Table Table drop column 

miután a drop művelet befejeződött, az aktuális korszakból mentett adatok az oszlop nélkül helyreállnak. Az aktuális korszakot megelőző biztonsági mentésből visszanyert adatok újra hozzáadják a táblázat oszlopát. Mivel a leejtési műveletek fizikailag kiürítik az objektumtároló és a katalógusdefiníciókat (táblázatelőzmények) a táblázatból, a AT EPOCH (historical) lekérdezések semmit sem adnak vissza az elejtett oszlophoz.

a módosított tábla megtartja objektumazonosítóját.

az oszlopos műveletek gyorsak lehetnek, mivel ezek a katalógusszintű változások nem igénylik az adatok átszervezését, így a Vertica gyorsan visszaszerezheti a lemez tárolását.

korlátozások

  • nem dobhatja le vagy módosíthatja az elsődleges kulcs oszlopát vagy a táblázat particionálási záradékában részt vevő oszlopot.
  • nem dobhatja le a vetítési rendezési sorrend első oszlopát, vagy azokat az oszlopokat, amelyek részt vesznek egy vetítési szegmentációs kifejezésben.
  • minden csomópontnak fent kell lennie.
  • nem dobhatja le a hozzáférési házirendhez társított oszlopot. Az erre tett kísérletek a következő hibát eredményezik:
    ERROR 6482: Failed to parse Access Policies for table "t1"

kaszkád használata a csepp kényszerítéséhez

Ha a leejtendő tábla oszlopnak függősége van, akkor a DROP COLUMNzáradékot a CASCADE opcióval kell megadnia. Például a céloszlop megadható vetítési rendezési sorrendben. Ebben és más esetekben a DROP COLUMN…CASCADE a katalógusdefiníciók átszervezésével vagy egy vetület elvetésével kezeli a függőséget. Minden esetben a CASCADE elvégzi az oszlop ledobásához szükséges minimális átszervezést.

használja a CASCADE egy oszlop eldobásához a következő függőségekkel:

leesett oszlopfüggőség kaszkád viselkedés

bármilyen kényszer

a Vertica eldobja az oszlopot, ha egy idegen kulcs kényszer a hivatkozott oszlopok egyedi vagy elsődleges kulcskorlátjától függ.

a vetítés rendezési sorrendjében megadott

a Vertica a vetítés rendezési sorrendjét a más oszlopok fizikai tárolására gyakorolt hatás nélkül leejtett vetületig csonkolja, majd a megadott oszlopot eldobja. Például, ha egy vetület oszlopai rendezési sorrendben vannak (a,b,c), A B oszlop eldobásával a vetület rendezési sorrendje csak (a), kihagyva a (c) oszlopot.

a vetítési szegmentációs kifejezésben megadott

a ledobandó oszlop szerves része a vetítési definíciónak. Ha lehetséges, a Vertica eldobja a vetítést, amíg ez nem veszélyezteti a K-biztonságot; ellenkező esetben a tranzakció visszahúzódik.

egy másik oszlop alapértelmezett értékeként hivatkozott

lásd alább az alapértelmezettként hivatkozott oszlop elvetését.

alapértelmezettként hivatkozott oszlop eldobása

lehet, hogy el szeretne dobni egy olyan táblázatoszlopot, amelyre egy másik oszlop hivatkozik alapértelmezett értékként. A következő táblázat például két oszlopot tartalmaz: a és b:, ahol a b az alapértelmezett értéket a a:

=> az X (A int) táblázat létrehozása nem szegmentált összes csomópont;táblázat létrehozása=> Alter Table x hozzáadása B oszlop hozzáadása Int alapértelmezett a;ALTER TABLE

ebben az esetben a a oszlop eldobása a következő eljárást igényli:

  1. távolítsa el az alapértelmezett függőséget a ALTER COLUMN..DROP DEFAULT:
    => ALTER TABLE x Alter COLUMN b drop DEFAULT;
  2. hozzon létre egy helyettesítő szuperprojekciót a céltáblához, ha az alábbi feltételek egyike vagy mindkettő igaz:
  • a céloszlop a táblázat első rendezési sorrend oszlopa. Ha a táblának nincs kifejezett rendezési sorrendje, az alapértelmezett rendezési sorrend az első táblázat oszlopot adja meg első rendezési sorrend oszlopként. Ebben az esetben az új szuperprojekciónak olyan rendezési sorrendet kell megadnia, amely kizárja a céloszlopot.
  • ha a táblázat szegmentált, a céloszlop a szegmentálási kifejezésben van megadva. Ebben az esetben az új szuperprojekciónak meg kell adnia egy szegmentációs kifejezést, amely kizárja a céloszlopot.

az előző példa alapján a x táblázat alapértelmezett rendezési sorrendje (a, b). Mivel oszlop a a táblázat első rendezési sorrend oszlopa, létre kell hoznia egy helyettesítő szuperprojekciót, amely az oszlopon van rendezve 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;
  • A Vertica a CASCADE irányelvet a következőképpen hajtja végre:

    • elveti a xtáblázat eredeti szuperprojektjét (x_super).
    • frissíti a helyettesítő szuperprojekciót x_p1 a aoszlop eldobásával.

    példák

    a következő parancssor sikeresen ledob egy bytea adattípus oszlopot:

     = > t Táblázat létrehozása (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

    a következő parancssor megpróbálja ledobni a FLOAT(8) oszlopot, de nem sikerül, mert nincs elég vetület a K-biztonság fenntartásához.

    => t Táblázat létrehozása (x FLOAT(8),y FLOAT(08));Táblázat létrehozása=> ALTER TABLE t DROP COLUMN y RESTRICT;ALTER TABLE=> y kiválasztása a t-ből;hiba 2624: oszlop "y" nem létezik=> Alter Table t drop x Cascade;visszagörgetés 2409: nem dobhat több oszlopot t=> DROP TABLE t Cascade;



    Vélemény, hozzászólás?

    Az e-mail-címet nem tesszük közzé.