はじめに

Verticaでは、既存テーブルの明示的な位置を指定して列を追加することはできません。
そのため、任意の位置に列を追加するためには、主に以下のような手順を踏む必要があります。
1) 構成したい列構成で別途ワークテーブルを作成
2) 既存テーブルからワークテーブルにデータをコピー
3) 既存テーブルとワークテーブルを入れ替える

本記事では、テーブルの任意の位置に列を追加する詳細な手順をご紹介します。

テーブルの任意の位置に列を追加する方法

概要

1. 既存テーブル(CUSTOMER)のDDL(CREATE TABLE文)を出力
2. 任意の位置に列を追加したワークテーブル(CUSTOMER_WK)を作成
3. 既存テーブルからワークテーブルへデータコピー(INSERT INTO ~ SEELCT)
4. ワークテーブルを最適化
5. RENAMEにて既存テーブルとワークテーブルを入れ替え
6. ワークテーブルをDROP

例)CUSTOMERテーブルのC_PHONE列の後にC_ADD列を追加する

1. 既存テーブル(CUSTOMER)のDDL(CREATE TABLE文)を出力



2. 任意の位置に列を追加したワークテーブル(CUSTOMER_WK)を作成

先ほどの手順で出力したテーブル定義をもとに、CUSTOMERテーブルのC_PHONE列の後にC_ADD列を追加したワークテーブル(CUSTOMER_WK)を作成します。


C_PHONE列の後にC_ADD列が存在するCUSTOMER_WKテーブルを作成することができました。

3. 既存テーブルからワークテーブルへデータコピー(INSERT INTO ~ SEELCT文)


既存テーブルからワークテーブルへデータをコピーすることができました。


4. ワークテーブルを最適化

Verticaは新規テーブルにデータを投入した後、テーブルを最適化する必要があります。
以下の技術情報サイトの手順を参考にテーブルの最適化を実行ください。
http://vertica-tech.ashisuto.co.jp/table_dbd/


5. RENAMEにて既存テーブルとワークテーブルを入れ替え

テーブルをRENAMEし、CUSTOMERテーブルとCUSTOMER_WKを入れ替えます。この手順により既存テーブルの任意の位置に列を追加した状態となります。

補足:VerticaのRENAMEは一度に複数のテーブルをRENAMEすることができるため、アクセス不可の時間無くテーブルを入れ替えることができます。RENAMEの詳細については、以下の技術情報サイトをご参照ください。
http://vertica-tech.ashisuto.co.jp/table_rename/


CUSTOMERテーブルのC_PHONE列の後にC_ADD列が追加された状態となっていることを確認できました。


6. ワークテーブルをDROP

不要になったワークテーブルをDROPすれば、列の追加作業は完了です。


検証バージョンについて

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