OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

異なるクラスタのテーブルにデータをコピーする方法(EXPORT TO VERTICA)

公開日:
更新日:
基本操作
#手順

はじめに

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

※イメージ図

構文

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.単一ノードから単一ノード

①ソース/ターゲットテーブルの確認

・ソーステーブル

dbadmin=> SELECT * FROM t1;
 col1
------
    1
    2
    3
(3 rows)

・ターゲットテーブル

dbadmin=> SELECT * FROM t1;
 col1
------
(0 rows)
②エクスポート用アドレスの確認

node_addressがクラスタノード間の通信に、export_addressが他のクラスタにエクスポートするための通信に使用されるIPアドレスです。
export_addressが、エクスポートを行うクラスタ同士が通信可能なIPアドレスとなっていることを確認します。

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)
③ターゲットクラスタのデータベースへ接続
CONNECT TO VERTICA target USER dbadmin PASSWORD '****' ON '192.168.XXX.XX',5433;
④EXPORT TO VERTICAの実行
EXPORT TO VERTICA target.t1 AS SELECT * FROM t1;
⑤ターゲットテーブルを確認
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アドレスを割り当てる設定をします。

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)
②ネットワークインターフェース作成
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';
③作成したインターフェースをエクスポートアドレスに設定
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の設定が変更されていることを確認します。

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の実行
dbadmin=> EXPORT TO VERTICA target.t1 AS SELECT * FROM t1;
Rows Exported
---------------
3
(1 row)
⑥ターゲットテーブルを確認
dbadmin=> select * from t1;
 col1
------
    1
    2
    3
(3 rows)

注意事項

エクスポート先にテーブルは事前に存在している必要があります。
特定のオブジェクトを異なる環境で作成したい時に便利な関数を以下の記事でご紹介しています。

オブジェクト定義をエクスポートする方法(EXPORT_CATALOG関数)
https://www.ashisuto.co.jp/cm/analytics-database/export_catalog.html

参考情報

EXPORT TO VERTICA
https://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

検証バージョンについて

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

更新履歴

2019/09/02 本記事を公開