ガチンコ塾のブログでもかいたのですが、行動力が大切だなーと思う今日この頃。
社長が熟練のJavaエンジニアで基本的に聞けば、基本的に解決することが多いのですが、外部の勉強会などにも出て情報収集の必要性があるなーと思っております。
んで、本日まとめたいのはテーブルのCSVエクスポート処理です。
通常のCSV出力
DB環境がローカルにある場合は下記コマンド一発で終了です。
SELECT * INTO OUTFILE ‘CSVのファイルパス’ FIELDS TERMINATED BY ‘,’ FROM テーブル名
基本的には通常のSELECT文と同じです、ただINTO~の部分がつくだけといったかんじです。
リモートDBのCSV出力
リモートだとこうはいきません。
その場合、mysql のオプションである-eを使うことになります。
CSV出力用のsqlを作成
CSVの結果を出力するためのSQLを作成します。
例えばフィールドがid,nameだとして下記のようにします。
1 2 3 4 |
SELECT CONCAT('"', id, '"') AS id, CONCAT('"', name, '"') AS name FROM test; |
この時点で下記のようなコマンドになり、CSV形式でデータを出すことはできます。
1 |
mysql -u ユーザー名 -p -h ホスト名 データベース名 -e "`cat sample.sql`" > result1 |
sedで整形
MySQLは標準ではタブ区切りでしか、ファイルを出力できないので、あとはこれを置換してやります。
タブをカンマ区切りにするためにsedを使います。
1 |
$ sed -e 's/\t/,/g' result1 > result2 |
これを一気に組み合わせると、下記のようになります。
1 |
mysql -u ユーザー名 -p -h ホスト名 データベース名 -e "`cat sample.sql`" | sed -e 's/\t/,/g' > test.csv |
ちなみにここを参考にしました。
MySQLリモートDBの結果をローカルCSVファイルに出力する方法
やっぱりテキスト処理系の技術(sedなど)は偉大ですねー。
もうちょい勉強せねば・・・