はじめに

Verticaでのカラムのデータ型の変更についてご紹介致します。
ここでは、以下のような2種類のデータ型の変更について取り上げます。
・データ型の変換(あるデータ型を別のデータ型に変換)
・カラム幅の変更(データ型の種類は変えず、カラム幅を変更)

それぞれについて、以下に記載致します。

データ型の変換

バイナリ型

BINARY型とVARBINARY型の間では変換はできません。

キャラクタ型

すべての変換ができます。
(CHAR型とVARCHAR型の変換など)

数値データ型

INTEGER型、INT型、BIGINT型、TINYINT型、INT8型、SMALLINT型、NUMERIC型(スケール(scale)が18以下と精度(precision)が0の場合)では変換ができます。
ただし、NUMERIC型では精度の値を変更する事はできませんが、スケールの値を変更する事は可能です。「0~18」、「19~37」といった範囲内で変更する事ができます。

BOOLEAN型

他のデータ型への変換はできません。

DATE型とTIME型

変換できません。

浮動小数点型

変換できません

BINARY型 と VARBINARY型

変換できません

カラム幅の変更

カラム幅の変更には、拡張と収縮がありますが、同じデータ型であれば拡張も収縮もする事ができます。
また、Verticaは実際にカラム幅を変更する前に格納されたデータを検証し問題がある場合には変更処理を行いません。

例えば、varchar(20)からvarchar(10)に変更(収縮)するケースで、そのカラムに11文字以上のデータが格納されている場合では、変更してしまう事でデータが途中で切れてしまう事になります。
このような事を防ぐために、Verticaは変更前にデータを検証します。


varchar(20)からvarchar(10)に変更(収縮)するとします。
まずは、成功する場合を見てみましょう。
変更(収縮)対象のカラムには、最も長いもので5文字のデータがあるとします。


この状態でcol2のカラムをvarchar(20)からvarchar(10)に変更(収縮)します。

問題なくカラム幅が変更された事が確認できました。

つぎに、失敗する場合を見てみましょう。
先ほど使ったテーブルをクリアするために一旦dropし、同じデータを挿入します。
ただし、今回は11文字のデータを追加する点が先ほどと異なります。


この状態でcol2のカラムをvarchar(20)からvarchar(10)に変更(収縮)します。

varchar(10)に変更してしまうと、4行目にある11文字のデータが切れてしまうため、Verticaはそれを検知して変換作業を行いませんでした。


参考資料

Verticaでサポートされているデータ型

検証バージョンについて

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