OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

Verticaで既存環境のテーブルのDDLとデータを一括で抽出する方法

公開日:
更新日:
基本操作
#テーブル
#DDL

はじめに

環境の再構築やデータの移行など、既存環境のデータを移行したいケースは多々あるかと思います。
この記事では、既存環境のテーブルのDDLやテーブルのデータを一括で抽出する方法をご紹介します。

手順の流れ

以下の様な手順で必要なデータを移行元環境から抽出します。

1.テーブルのDDL
2.テーブル一覧
3.データ

DDLの抽出

初めに、対象データベースからテーブルのDDLを全て抽出します。
以下の記事でもご紹介している手順で実行します。

【参考】
Verticaのオブジェクト定義をエクスポートする方法
https://www.ashisuto.co.jp/cm/analytics-database/ddl_export.html

ワークディレクトリに移動
$ cd 

DDLを抽出
$ vsql -w  -c "select export_tables('');"  |sed -e '1,2d' |grep -v " row" > cre_all_tabls.sql

ファイルが出力されたか確認
$ ls -ltr cre_all_tables.sql

さらに整形する場合にはviで編集して上書き保存
$ vi cre_all_tables.sql

DDL抽出時にsedコマンドを組み合わせることで、ヘッダを削除してファイルに出力できます。
ここまでの手順でDDLの抽出が完了します。

テーブル情報の抽出

次に、テーブル名の一覧を抽出します。
次の手順でデータの出力処理を一括で実行するために、必要なテーブル名の一覧を抽出します。

テーブル名を抽出
$ vsql -w  -c "select table_schema,table_name from tables;" |grep -Ev "table_| row|-" |sed -e '$d' |awk '{print $1"."$3}' > all_tables.txt

ファイルが出力されたか確認
$ ls -ltr all_tables.txt

ヘッダ、フッタに余計な出力が残っている場合には削除して上書き保存
$ vi all_tables.txt

grepやawkを組み合わせて不要な出力を除外して整形します。

データの抽出

データの抽出には、以下の記事でご紹介した手順を利用します。

SELECT結果をCSV出力する方法
https://www.ashisuto.co.jp/cm/analytics-database/csv-output.html

$ for tname in `cat all_tables.txt`;do
   vsql -w  -F '|' -P pager=off -AXtnqc "SELECT * FROM ${tname};" > /tmp/${tname}.csv
done

テーブル名の一覧を順に読み込んで、対象テーブルのデータをCSVに出力します。

なお、格納されているデータによっては、正しく区切られなかったりするケースがあります。
そのような場合にはロード時にエラーが発生することが考えられます。
適宜、出力フォーマットを変更して動作をご確認ください。

件数確認

最後に、移行作業実施後に全てのデータが移行できたか確認するために、全てのテーブルの件数を控えておきます。

$ for tname in `cat all_tables.txt`;do
   vsql -w  -c "select count(*) as \"${tname}\" from ${tname};"
done > before_all_tab_count.log

まとめ

今回ご紹介した手順で抽出したDDLやデータがあれば、他の環境にデータを移行したり環境再構築時のバックアップデータとしても活用することができます。ぜひ参考にしてください。

参考記事

CSVデータのロード方法
https://www.ashisuto.co.jp/cm/analytics-database/load-csv.html

データロードの基本
https://www.ashisuto.co.jp/cm/analytics-database/dataload_overview.html

COPYコマンドでCSVの特定の列をロード対象外とする方法
https://www.ashisuto.co.jp/cm/analytics-database/copy_filler.html

COPYでロードに成功/失敗した件数を確認する方法
https://www.ashisuto.co.jp/cm/analytics-database/copy_accept_reject_rows.html

データロードのまとめ記事
https://www.ashisuto.co.jp/cm/analytics-database/load-summary.html

検証バージョンについて

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