目次
はじめに
Vertica9.2.1から、テーブルに列を追加するとき、そのテーブルに関連するすべてのプロジェクションに同時に追加できるようになりました。過去のバージョンでは、スーパープロジェクション以外のプロジェクションに反映するためには、手動で再作成する必要がありました。構文
ALL PROJECTIONS オプションを指定することで、すべてのプロジェクションに列を追加できます。
1 |
ALTER TABLE テーブル名 ADD COLUMN カラム名 データ型 ALL PROJECTIONS; |
実行例
ALL PROJECTIONS の指定による動作の違いについて、ご紹介します。ALL PROJECTIONS を指定しない場合(デフォルト)
テーブルに列を追加した場合は、スーパープロジェクションのみに追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
/* testテーブルのプロジェクションを確認 */ dbadmin=> SELECT projection_name, is_super_projection dbadmin-> FROM projections dbadmin-> WHERE anchor_table_name = 'test'; projection_name | is_super_projection -----------------+--------------------- test_b0 | t /* スーパープロジェクション */ test_b1 | t /* スーパープロジェクション */ test_pr2_b0 | f /* 個別プロジェクション */ test_pr2_b1 | f /* 個別プロジェクション */ (4 rows) /* スーパープロジェクションと個別プロジェクションの列を確認 */ dbadmin=> SELECT projection_name, LISTAGG(projection_column_name) columns dbadmin-> FROM projection_columns dbadmin-> WHERE table_name = 'test' dbadmin-> GROUP BY projection_name ORDER BY projection_name; projection_name | columns -----------------+--------- test_b0 | c1,c2 /* スーパープロジェクションの列 */ test_b1 | c1,c2 /* スーパープロジェクションの列 */ test_pr2_b0 | c1 /* 個別プロジェクションの列 */ test_pr2_b1 | c1 /* 個別プロジェクションの列 */ (4 rows) /* testテーブルにc3列を追加 */ dbadmin=> ALTER TABLE test ADD COLUMN c3 INT; ALTER TABLE /* スーパープロジェクションと個別プロジェクションの列を確認 */ dbadmin=> SELECT projection_name, LISTAGG(projection_column_name) columns dbadmin-> FROM projection_columns dbadmin-> WHERE table_name = 'test' dbadmin-> GROUP BY projection_name ORDER BY projection_name; projection_name | columns -----------------+---------- test_b0 | c1,c2,c3 /* c3列が追加された */ test_b1 | c1,c2,c3 /* c3列が追加された */ test_pr2_b0 | c1 /* 変更なし */ test_pr2_b1 | c1 /* 変更なし */ (4 rows) |
ALL PROJECTIONS を指定した場合
テーブルに列を追加した場合は、すべてのプロジェクションに追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
/* testテーブルのプロジェクションを確認 */ dbadmin=> SELECT projection_name, is_super_projection dbadmin-> FROM projections dbadmin-> WHERE anchor_table_name = 'test'; projection_name | is_super_projection -----------------+--------------------- test_b0 | t /* スーパープロジェクション */ test_b1 | t /* スーパープロジェクション */ test_pr2_b0 | f /* 個別プロジェクション */ test_pr2_b1 | f /* 個別プロジェクション */ (4 rows) /* スーパープロジェクションと個別プロジェクションの列を確認 */ dbadmin=> SELECT projection_name, LISTAGG(projection_column_name) columns dbadmin-> FROM projection_columns dbadmin-> WHERE table_name = 'test' dbadmin-> GROUP BY projection_name ORDER BY projection_name; projection_name | columns -----------------+--------- test_b0 | c1,c2 /* スーパープロジェクションの列 */ test_b1 | c1,c2 /* スーパープロジェクションの列 */ test_pr2_b0 | c1 /* 個別プロジェクションの列 */ test_pr2_b1 | c1 /* 個別プロジェクションの列 */ (4 rows) /* ALL PROJECTIONSオプションを指定し、testテーブルにc3列を追加 */ dbadmin=> ALTER TABLE test ADD COLUMN c3 INT ALL PROJECTIONS; ALTER TABLE /* スーパープロジェクションと個別プロジェクションの列を確認 */ dbadmin=> SELECT projection_name, LISTAGG(projection_column_name) columns dbadmin-> FROM projection_columns dbadmin-> WHERE table_name = 'test' dbadmin-> GROUP BY projection_name ORDER BY projection_name; projection_name | columns -----------------+---------- test_b0 | c1,c2,c3 /* c3列が追加された */ test_b1 | c1,c2,c3 /* c3列が追加された */ test_pr2_b0 | c1,c3 /* c3列が追加された */ test_pr2_b1 | c1,c3 /* c3列が追加された */ (4 rows) |
参考情報
ALTER TABLEhttps://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/SQLReferenceManual/Statements/ALTERTABLE.htm
列追加/削除時のエラーを回避する方法(Vertica9.2新機能)
http://vertica-tech.ashisuto.co.jp/column_exists/
テーブルの任意の位置に列を追加する方法
http://vertica-tech.ashisuto.co.jp/table_add_column/