- ベストアンサー
MySQLで連続csvファイルを読み込む方法は?
- MySQL 5.6を使用して大量の連続csvファイルを読み込む方法を知りたいです。
- LOAD DATA INFILEを使用してファイル名を順次変えて自動化する方法がわかりません。
- ファイル名に変数を使用することは可能なのか知りたいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
スクリプトは不要でした。 mysqlimport単体で複数ファイルを一括インポートできるようです。 例えばtkhgshデータベースのtestテーブルにインサートするとします。 ファイル名を data1_1.csv、data1_2.csv、data1_3.csv、data2_1.csv から test.data1_1.csv、test.data1_2.csv、test.data1_3.csv、test.data2_1.csv などとインサートするテーブル名に変えてください。 mysqlimport -L tkhgsh /path/to/test.* これで一括インポートできます。スクリプトは不要でした。 mysqlの権限やcsvファイルのパーミッションに気を付けてください。 他、オプションやcsvファイルの仕様などはマニュアル見てください。 http://dev.mysql.com/doc/refman/5.1/ja/mysqlimport.html http://dev.mysql.com/doc/refman/5.1/ja/load-data.html ------------ 自分が言ったスクリプトというのは、 #!/bin/sh files="/path/to/csv/*" for file in ${files} do mysqlimport database ${file} done で、1ファイルずつmysqlimportすることを考えていました。 これとは別に、最初にファイルをまとめて巨大なファイルを作ってインポートでも可能ですね。 $ cat /path/to/csv/* >test.csv $ mysqlimport database test.csv また、回答2、3の人のはcsvをインポートではなく、 csvをinsert文に変えてmysqlに突っ込む方法ですね。 $ mysql database <test.sql でtest.sqlに書かれたsql文をdatabaseに対して発行できます。 csvの中が A 1 A 2 b 3 などとなっていれば、例えば insert into test values('A', 1); insert into test values('A', 2); insert into test values('B', 3); などと変えてやり、それで上記の$ mysql database <test.sql でインサートできます。 やり方様々、あります。 mysql、linux、シェルスクリプトの基本の基本から学びなおしてください。 windows環境ならばシェルスクリプトではなくコマンドプロンプトですね。がんばってください。
その他の回答 (3)
- gtx456gtx
- ベストアンサー率18% (194/1035)
下記のようなバッチ・ファイルを作成して、実行できませんか? mysql -u napzak -p --default-character-set=utf8 foo_db < dump.sql 300個は大したことないですよ。 ディレクトリが複雑だと面倒ですが、それも事前に別なバッチで前処理すれば解決できますよ。 要は、必要ならPerlなどで前処理を行ってから「mysql -u napzak -p --default-character-set=utf8 foo_db < dump.sql」などのコマンドを実行するようにすれば、起動して完了を待つだけになりますよ。 まぁ~それなりに事前のテストなどは必要ですが ^ ^;
お礼
ありがとうございます。 ところで、バッチファイルの中には何を書くのでしょうか?SQLの LOAD DATA INFILE 文を並べるのでしょうか? そうだとしたら、このファイル名には変数を利用して、data1.csv~data300.csvを順繰りに指定することは出来るのでしょうか?(今のところMySQLコマンドラインではうまくいかないので・・) 勘違いだったらすみません。どうぞよろしくお願いいたします。
- gtx456gtx
- ベストアンサー率18% (194/1035)
CSVがあるなら、ちょっとフォーマットを編集してSQLに直して、普通にインポートするのは駄目ですか?
補足
ありがとうございます。 ファイルが300個程度あるので、一つ一つインポートという選択肢は避けたいと願っています。 しかも、実はフォルダも分かれていたりするので、繰り返し処理でインポートする以外手はない気がしています。すみません。
- Gaffgarion
- ベストアンサー率45% (45/99)
mysql内で完結しないといけないのでしょうか? スクリプト(シェルスクリプトやコマンドプロンプトのバッチ)とmysqlimportは使えませんか?
補足
すみません。初心者であまり良くわかっていないところがあると思いますが、お許しください。 最終的に一つのテーブルになるのであれば、MySQLのなかで、完結する必要はありません。 スクリプトとは、テキストに書いておいて、SOURCE コマンドで走らせると言うことですか? mysqlimportでは、ファイル名に変数が使えるのでしょうか? どうぞよろしくお願いいたします。
お礼
ありがとうございます!! Windowsなので、コマンドプロンプトなど見直して見ます。 思ったよりもすっと行きそうなので、安心しました。 また、それ以外でもいろいろ教えていただきありがとうございます。