💡
【MySQL】SQL結果をINTO OUTFILEを使わずにcsvに出力する
-
INTO OUTFILE
を使ってcsv出力する記事が多いけれど、他の方法として書いておく - この方法だと
ERROR 1290 (HY000) at line 1: The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
に引っかかってエラーになることもないはず- いちいち設定変えたり、DB再起動はしたくない
tab区切りのcsv出力
- コマンド
mysql -u user -ppassword -e "SELECT user_id, count(*) AS count FROM db_name.table_name GROUP BY user_id" > outcsv.csv
- 出力されるcsv
user_id count
1 1
2 1
3 1
カンマ区切りのcsv出力
- sedコマンドを使ってtabをカンマに変換する
mysql -u user -ppassword -e "SELECT user_id, count(*) AS count FROM db_name.table_name GROUP BY user_id" | sed -e 's/\t/,/g' > outcsv.csv
- 出力されるcsv
user_id,count
1,1
2,1
3,1
その他
- ヘッダーは不要とかだったら
-s
などのオプションコマンドなどを使用 - 改行コードに関しては使用しているOSに依存するかと思います(自分はMacOSなのでCRでした)
- ローカルとかでシュッとやるには良い方法だと思います
- 出力結果が大きかったりする場合は
INTO OUTFILE
を使ってS3に出力する方法などもあるので、そちらの方が良いとは思います
- 出力結果が大きかったりする場合は
Discussion