はじめに
EXPORT TO VERTICA文を使って、異なるクラスタ間でテーブルのデータをエクスポート/インポートできます。vbr(Verticaのバックアップリカバリツール)によってクラスタごとコピーする方法とは違い、ノード台数が異なっても実施できるため、サーバ構成の異なる環境同士でテーブルのデータをコピーしたい場合に便利です。
※イメージ図

構文
| 1 2 3 | EXPORT TO VERTICA database.[schema.]target‑table  ... [ ( target‑column[,…] ) ]  ... { AS SELECT query‑expression | FROM [schema.]source‑table[ ( source‑column[,…] ) ] }; | 
| パラメータ | 説明 | 
|---|---|
| database | エクスポートしたデータを受け取るデータベース名。 | 
| [schema.]target‑table | エクスポートしたデータを受け取るテーブル。 このテーブルはすでに存在している必要があります。 | 
| target‑column | エクスポートされたデータを格納する列のリスト。 | 
| query‑expression | エクスポートするデータを呼び出すクエリを指定します。 | 
| [schema.]source‑table | エクスポート元のデータを含むテーブル。 | 
| source‑column | ソーステーブルからエクスポートする列のリスト。 指定した場合、これらの列のみをエクスポートします。 | 
使用例
1.単一ノードから単一ノード
①ソース/ターゲットテーブルの確認
・ソーステーブル| 1 2 3 4 5 6 7 | dbadmin=> SELECT * FROM t1;  col1 ------     1     2     3 (3 rows) | 
・ターゲットテーブル
| 1 2 3 4 | dbadmin=> SELECT * FROM t1;  col1 ------ (0 rows) | 
②エクスポート用アドレスの確認
node_addressがクラスタノード間の通信に、export_addressが他のクラスタにエクスポートするための通信に使用されるIPアドレスです。export_addressが、エクスポートを行うクラスタ同士が通信可能なIPアドレスとなっていることを確認します。
| 1 2 3 4 5 | dbadmin=> SELECT node_name, node_address, export_address FROM nodes;      node_name     |  node_address  | export_address -------------------+----------------+----------------  v_source_node0001 | 192.168.213.55 | 192.168.213.55 (1 row) | 
③ターゲットクラスタのデータベースへ接続
| 1 | CONNECT TO VERTICA target USER dbadmin PASSWORD '****' ON '192.168.XXX.XX',5433; | 
④EXPORT TO VERTICAの実行
| 1 | EXPORT TO VERTICA target.t1 AS SELECT * FROM t1; | 
⑤ターゲットテーブルを確認
| 1 2 3 4 5 6 7 | dbadmin=> select * from t1;  col1 ------     1     2     3 (3 rows) | 
2.複数ノードから単一ノード
通常Verticaでは、クラスタを複数ノード構成にする場合、ネットワークはパブリックIPとプライベートIPの2系統で管理します。複数ノード構成のVerticaからEXPORT TO VERTICAを実行する際には、エクスポート用のアドレスをクラスタ同時が通信可能なIPアドレスに設定する必要があります。
そのため、もしエクスポートアドレスがターゲットクラスタから通信の取れないIPアドレスとなっている場合は、以下の手順を実施します。
パブリックIP…アプリケーション等、外部との通信に使用する。
プライベートIP…ノード間通信に使用する。
※ターゲットクラスタも複数ノード構成の場合は、「①」~「②」をターゲットクラスタでも実施します。
①エクスポート用アドレスの確認
ここではexport_addressにプライベートIPに当たるものが設定されているため、外部と通信可能なIPアドレスを割り当てる設定をします。| 1 2 3 4 5 6 7 | dbadmin=> SELECT node_name, node_address, export_address FROM nodes;     node_name    | node_address | export_address -----------------+--------------+----------------  v_test_node0001 | 10.0.0.XXX   | 10.0.0.XXX  v_test_node0002 | 10.0.0.XXX   | 10.0.0.XXX  v_test_node0003 | 10.0.0.XXX   | 10.0.0.XXX (3 rows) | 
②ネットワークインターフェース作成
| 1 2 3 | create network interface v_node0001 on v_test_node0001 with '192.168.XXX.XXX'; create network interface v_node0002 on v_test_node0002 with '192.168.XXX.XXX'; create network interface v_node0003 on v_test_node0003 with '192.168.XXX.XXX'; | 
③作成したインターフェースをエクスポートアドレスに設定
| 1 2 3 | ALTER NODE v_test_node0001 export on v_node0001; ALTER NODE v_test_node0002 export on v_node0002; ALTER NODE v_test_node0003 export on v_node0003; | 
④エクスポート用アドレスの確認
export_addressの設定が変更されていることを確認します。| 1 2 3 4 5 6 7 | dbadmin=> SELECT node_name, node_address, export_address FROM nodes;     node_name    | node_address | export_address -----------------+--------------+-----------------  v_test_node0001 | 10.0.0.XXX   | 192.168.XXX.XXX ★  v_test_node0002 | 10.0.0.XXX   | 192.168.XXX.XXX ★  v_test_node0003 | 10.0.0.XXX   | 192.168.XXX.XXX ★ (3 rows) | 
⑤EXPORT TO VERTICAの実行
| 1 2 3 4 5 | dbadmin=> EXPORT TO VERTICA target.t1 AS SELECT * FROM t1; Rows Exported --------------- 3 (1 row) | 
⑥ターゲットテーブルを確認
| 1 2 3 4 5 6 7 | dbadmin=> select * from t1;  col1 ------     1     2     3 (3 rows) | 
注意事項
エクスポート先にテーブルは事前に存在している必要があります。特定のオブジェクトを異なる環境で作成したい時に便利な関数を以下の記事でご紹介しています。
オブジェクト定義をエクスポートする方法(EXPORT_CATALOG関数)
https://vertica-tech.ashisuto.co.jp/export_catalog/
参考情報
EXPORT TO VERTICAhttps://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/SQLReferenceManual/Statements/EXPORTTOVERTICA.htm
Exporting Data to Another Vertica Database
https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/SQLReferenceManual/Statements/EXPORTTOVERTICA.htm
CONNECT
https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/SQLReferenceManual/Statements/CONNECT.htm


