💡

【MySQL】SQL結果をINTO OUTFILEを使わずにcsvに出力する

2024/02/20に公開
  • 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