はじめに

テーブルに列を追加した場合は、スーパープロジェクションには必ず列が追加されます。しかし、クエリスペシフィックプロジェクションには、ALTER TABLEコマンドのオプションを付けなければ、列は追加されません。
本記事は、ALTER TABLEコマンドで、プロジェクションに列を追加する場合の動作をご紹介します。

構文

[テーブルに列を追加する構文]
オプションを指定して、プロジェクションに列を追加できます。

ALTER TABLE <テーブル名> ADD COLUMN <列名> <データ型> ・・・
[PROJECTIONS (プロジェクション名,プロジェクション名,・・・) | ALL PROJECTIONS];

[オプション]
オプション名概要
指定無し(デフォルト)オプションを指定しない場合、スーパープロジェクションのみに列が追加されます。
PROJECTIONS列を追加したいプロジェクション名を指定します。(複数指定可)
列を追加しないプロジェクションがある場合は、このオプションを選択します。
ALL PROJECTIONS全てのプロジェクションに列を追加する場合は、このオプションを選択します。

実行例

スーパープロジェクションのみに列を追加する場合(指定無し(デフォルト))

スーパープロジェクションのみに列を追加する場合はオプション無しで実行します。この場合、スーパープロジェクションのみに列が追加されます。
※スーパープロジェクションは、テーブルに1件以上データを追加した段階で作成されます。

■testテーブルのプロジェクションを確認


■スーパープロジェクションとクエリスペシフィックプロジェクションの列を確認


■testテーブルにc3列を追加


■スーパープロジェクションとクエリスペシフィックプロジェクションの列を確認


特定のプロジェクションに列を追加する場合(PROJECTIONS)

特定のプロジェクションに列を追加したい場合は、PROJECTIONS オプションでプロジェクション名を指定します。このオプションでは指定したプロジェクションとスーパープロジェクションに列が追加されます。

■testテーブルのプロジェクションを確認


■スーパープロジェクションとクエリスペシフィックプロジェクションの列を確認


■PROJECTIONSオプションを指定し、testテーブルにc3列を追加


■スーパープロジェクションとクエリスペシフィックプロジェクションの列を確認


テーブルの全てのプロジェクションに列を追加する場合(ALL PROJECTIONS)

テーブルの全てのプロジェクションに列を追加したい場合は、ALL PROJECTIONS オプションを指定します。このオプションではテーブルに作成されている全てのプロジェクションとスーパープロジェクションに列が追加されます。

■testテーブルのプロジェクションを確認


■スーパープロジェクションとクエリスペシフィックプロジェクションの列を確認


■ALL PROJECTIONSオプションを指定し、testテーブルにc3列を追加


■スーパープロジェクションとクエリスペシフィックプロジェクションの列を確認


注意事項

・ライブアグリゲートプロジェクションに列を追加することはできません。
・ALTER TABLE文の”ALL PROJECTIONS”はVertica9.2.1から使用可能です。
・追加した列をプロジェクションのセグメントキーやOrder byに含める場合は、プロジェクションの再作成が必要です。

参考情報

プロジェクションの概要
https://vertica-tech.ashisuto.co.jp/projection-description/

ALTER TABLE
https://docs.vertica.com/25.1.x/en/sql-reference/statements/alter-statements/alter-table/

列追加/削除時のエラーを回避する方法(Vertica9.2新機能)
https://vertica-tech.ashisuto.co.jp/column_exists/

テーブルの任意の位置に列を追加する方法
https://vertica-tech.ashisuto.co.jp/table_add_column/

検証バージョンについて

この記事の内容はVertica 25.1で確認しています。

更新履歴

2025/03/11 関連記事を本記事に統合、一部内容修正
2019/12/26 カテゴリを修正
2019/09/18 本記事を公開