クラウドサービスを用いたシステム構築が多く見られるようになった今、オンプレミス環境で使用されているVerticaをクラウド環境に移設する例が多く見られるようになりました。Verticaは、Amazon Web Services (AWS)・Microsoft Azure・Google Cloud Platform (GCP)で簡単に環境を立ち上げられるようにテンプレートを提供しています。また、サポートしているオペレーティングシステムおよびバージョンを用いた仮想環境での動作も保証しているので、それら以外のクラウドサービス上でVerticaを構築することもできます。
環境の移設を行うにあたり、既存データの移行方法を検討する必要があります。既存データのすべてが他システムで保持しているデータのコピーであれば、新しい環境を構築後に再度各システムからロードすればよいので、データ移行の必要はありません。既存データのすべてまたは一部は既存のVertica上にのみ存在している場合、データ移行が必要となります。
Verticaではデータ移行の方法として、以下を提供しています。
- Backup / Restore
- Copy Cluster (vbr -t copycluster)
- Export / Import (EXPORT TO VERTICA / COPY FROM VERTICA)
これらの方法にはクラスタ構成(ノード数やデータベース名)が同一であること、Verticaのバージョンが同じであること、ネットワーク疎通が可能なこと、など何らかの制約があります。環境の移設ではこれらの制約を満たすことができないケースが多く、この場合は以下の方法を検討することになります。
- サードパーティのETLツールなどによるデータコピー
- vsqlやClient Driverを用いてデータをテキストファイルに出力し、新しい環境でデータロード
- EXPORT TO PARQUETを用いてデータをParquestファイルに出力し、新しい環境でデータロード
今回はEXPORT TO PARQUETを例に用います。EXPORT TO PARQUETはVertica 8.1.1以降で使用できます。また、データ型などに制約があるので、それぞれのバージョンのProduct Documentationを確認してください。
移行元でのデータの出力
vsqlで移行元のVerticaにログインし、EXPORT TO PARQUETを実行します。
EXPORT TO PARQUET(directory = '<出力先ディレクトリ>') AS SELECT ... FROM ...;
出力先のディレクトリとデータを抽出するSELECT文を指定します。出力先のファイル名は「<8桁のハッシュ値>-<ノード名>-<スレッドID>.parquet」です。EXPORT TO PARQUETの他オプションなどの詳細については以下を参照してください。
SQL Reference Manual > SQL Statements > EXPORT TO PARQUET
以下は実行例です。
source=> EXPORT TO PARQUET(directory = '/tmp/data') AS SELECT * FROM tcph.customer;
Rows Exported
---------------
150000
(1 row)
source=> \! ls -l /tmp/data/*.parquet
-rw-rw---- 1 dbadmin verticadba 13267063 May 10 14:41 /tmp/data/dac97577-v_onpremisedb_node0001-140295777810176.parquet
移行先でのデータのロード
出力したParquetファイルはCOPYを用いてロードできます。
COPY <ロード先テーブル名> FROM '<Parquetファイル名>' PARQUET;
COPYの他オプションなどの詳細については以下を参照してください。
SQL Reference Manual > SQL Statements > COPY
以下は実行例です。
target=> COPY tcph_new.customer FROM '/tmp/data/dac97577-v_onpremisedb_node0001-140295777810176.parquet' PARQUET;
Rows Loaded
-------------
150000
(1 row)
EXPORT TO PARQUETの制約を満たすことができれば容易にデータを移行することができます。是非、他の方法とあわせて検討してみてください。