はじめに
環境の再構築やデータの移行など、既存環境のデータを移行したいケースは多々あるかと思います。この記事では、既存環境のテーブルのDDLやテーブルのデータを一括で抽出する方法をご紹介します。
手順の流れ
以下の様な手順で必要なデータを移行元環境から抽出します。1.テーブルのDDL
2.テーブル一覧
3.データ
2.テーブル一覧
3.データ
DDLの抽出
初めに、対象データベースからテーブルのDDLを全て抽出します。以下の記事でもご紹介している手順で実行します。
【参考】
Verticaのオブジェクト定義をエクスポートする方法
http://vertica-tech.ashisuto.co.jp/ddl_export/
1 2 3 4 5 6 7 8 9 10 11 |
ワークディレクトリに移動 $ 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の抽出が完了します。
テーブル情報の抽出
次に、テーブル名の一覧を抽出します。次の手順でデータの出力処理を一括で実行するために、必要なテーブル名の一覧を抽出します。
1 2 3 4 5 6 7 8 |
テーブル名を抽出 $ 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出力する方法
http://vertica-tech.ashisuto.co.jp/csv-output/
1 2 3 |
$ for tname in `cat all_tables.txt`;do vsql -w -F '|' -P pager=off -AXtnqc "SELECT * FROM ${tname};" > /tmp/${tname}.csv done |
テーブル名の一覧を順に読み込んで、対象テーブルのデータをCSVに出力します。
なお、格納されているデータによっては、正しく区切られなかったりするケースがあります。
そのような場合にはロード時にエラーが発生することが考えられます。
適宜、出力フォーマットを変更して動作をご確認ください。
件数確認
最後に、移行作業実施後に全てのデータが移行できたか確認するために、全てのテーブルの件数を控えておきます。
1 2 3 |
$ 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データのロード方法http://vertica-tech.ashisuto.co.jp/load-csv/
データロードの基本
http://vertica-tech.ashisuto.co.jp/dataload_overview/
COPYコマンドでCSVの特定の列をロード対象外とする方法
http://vertica-tech.ashisuto.co.jp/copy_filler/
COPYでロードに成功/失敗した件数を確認する方法
http://vertica-tech.ashisuto.co.jp/copy_accept_reject_rows/
データロードのまとめ記事
http://vertica-tech.ashisuto.co.jp/load-summary/