はじめに
環境の再構築やデータの移行など、既存環境のデータを移行したいケースは多々あるかと思います。
この記事では、既存環境のテーブルの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.sqlDDL抽出時に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.txtgrepや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で確認しています。