Tips: Parquetファイルを用いたデータ移行

  • hibiki

クラウドサービスを用いたシステム構築が多く見られるようになった今、オンプレミス環境で使用されている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の制約を満たすことができれば容易にデータを移行することができます。是非、他の方法とあわせて検討してみてください。

タグ:
カテゴリ: