テーブル列の削除
Vertica Analytics Platformバージョン9.2。xドキュメント
ALTER TABLE…DROP COLUMN
ALTER TABLE…DROP COLUMN
ALTER TABLE…DROP COLUMN
ALTER TABLE…DROP COLUMN
alter table table drop column
ドロップ操作が完了すると、現在のエポック 現在のエポックの前にあるバックアップから復元されたデータは、表の列を再追加します。 ドロップ操作では、テーブルからオブジェクトストレージとカタログ定義(テーブル履歴)が物理的に消去されるため、AT EPOCH
(履歴)クエリでは、ドロップされた列に対して何も返されません。変更されたテーブルはそのオブジェクトIDを保持します。
変更されたテーブルはそのオブジ
これらのカタログレベルの変更はデータの再編成を必要としないため、Verticaはディスクストレージを迅速に再利用できるため、列の削除操作が高速
制約事項
- 主キー列またはtable partitioning句に含まれる列を削除または変更することはできません。
- 投影ソート順の最初の列、または投影セグメンテーション式に含まれる列を削除することはできません。
- すべてのノードが稼働している必要があります。
- アクセスポリシーに関連付けられている列を削除することはできません。 そうしようとすると、次のエラーが生成されます:
ERROR 6482: Failed to parse Access Policies for table "t1"
CASCADEを使用してドロップを強制する
ドロップするテーブル列に依存関係がある場合は、DROP COLUMN
CASCADE
DROP COLUMN…CASCADE
CASCADE
は、列を削除するために必要な最小限の再編成を実行します。 次の依存関係を持つ列を削除するには、
CASCADE
を使用します。
列の依存関係を削除しました | カスケード動作 |
---|
列の依存関係を削除しました | カスケード動作 |
---|---|
任意の制約 |
外部キー制約が参照される列の一意または主キー制約に依存する場合、verticaは列を削除します。 |
投影ソート順で指定 |
Verticaは、他の列の物理ストレージに影響を与えずに削除された投影まで投影ソート順を切り捨て、指定された列を削除します。 たとえば、投影の列の並べ替え順序が(a,b,c)の場合、列bを削除すると、投影の並べ替え順序は(a)だけになり、列(c)は省略されます。 |
投影セグメンテーション式で指定された |
ドロップする列は投影定義に積分されます。 可能であれば、Verticaは、k-safetyを損なわない限り、投影を削除します。 |
別の列のデフォルト値として参照されている |
以下のデフォルト値として参照されている列の削除を参照してください。 |
デフォルト値として参照される列の削除
別の列によって参照されるテーブル列をデフォルト値とし たとえば、次の表は、a
b
b
a
:
=b
:
=b
:=b
:=create table x(a int)セグメント化されていないすべてのノード;create table=>alter table x add column b int default a;alter tableこの場合、列を削除する
a
次の手順が必要です:
ALTER COLUMN..DROP DEFAULT
:=>ALTER TABLE x ALTER COLUMN b DROP DEFAULT;- 次のいずれかまたは両方の条件がtrueの場合、ターゲットテーブルの置換スーパープロジェクショ>
- ターゲット列は、テーブルの最初の並べ替え順序列です。 テーブルに明示的な並べ替え順序がない場合、既定のテーブルの並べ替え順序では、最初のテーブル列が最初の並べ替え順序列として指定されます。 この場合、新しいスーパープロジェクトでは、ターゲット列を除外する並べ替え順序を指定する必要があります。
- テーブルがセグメント化されている場合、ターゲット列はセグメント化式で指定されます。 この場合、新しいスーパープロジェクションでは、ターゲット列を除外するセグメンテーション式を指定する必要があります。前の例では、テーブル
x
のデフォルトの並べ替え順序は(a,b)です。 列a
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はCASCADE
ディレクティブを次のように実装します。
- テーブル
x
x_super
)の元のスーパープロジェクションを削除します。- 置換スーパープロジェクト
x_p1
a
を更新します。次の一連のコマンドは、BYTEAデータ型の列を正常に削除します。=>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 xRESTRICT
;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次の一連のコマンドは、FLOAT(8)列を削除しようとしましたが、k-safetyを維持するのに十分な投影がないため失敗しました。テーブルを作成する=>テーブルtドロップ列y制限;変更テーブル=>Tからyを選択;エラー2624:列"y"はありません存在しない=>alter table t drop x cascade;rollback2409:T=>drop table t cascade;rollback2409:tにそれ以上の列を削除できません=>drop table t cascade;
div