MySQL 5.6を最近使い始めました。
大量のcsvファイルで保存されているデータを読み込んで、データベースとして扱いたいのですが、どうすれば良いでしょうか?
ファイル名は、
data1_1.csv
data1_2.csv
data1_3.csv
data2_1.csv
data2_2.csv
といった形で、規則正しく並んでいるのですが、大量にあるため、ループを使って自動化したいと思っております。そのために、LOAD DATA INFILE ファイル名 を使って、このファイル名を順次変えて繰り返す方法がわかりません。
まず、ファイル名に変数が使えるのかと思って @file="data1_1.csv"としてファイル名を置き換えてみたのですが、エラーでした。これでは、この1_1を順次動かす以前に変数が無理なのかも?と思っています。
何かやり方があるようでしたら、どなたかお教えください。
どうぞよろしくお願いいたします。
No.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/mysqlimpo …
http://dev.mysql.com/doc/refman/5.1/ja/load-data …
------------
自分が言ったスクリプトというのは、
#!/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環境ならばシェルスクリプトではなくコマンドプロンプトですね。がんばってください。
ありがとうございます!!
Windowsなので、コマンドプロンプトなど見直して見ます。
思ったよりもすっと行きそうなので、安心しました。
また、それ以外でもいろいろ教えていただきありがとうございます。
No.3
- 回答日時:
下記のようなバッチ・ファイルを作成して、実行できませんか?
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コマンドラインではうまくいかないので・・)
勘違いだったらすみません。どうぞよろしくお願いいたします。
No.1
- 回答日時:
mysql内で完結しないといけないのでしょうか?
スクリプト(シェルスクリプトやコマンドプロンプトのバッチ)とmysqlimportは使えませんか?
この回答への補足
すみません。初心者であまり良くわかっていないところがあると思いますが、お許しください。
最終的に一つのテーブルになるのであれば、MySQLのなかで、完結する必要はありません。
スクリプトとは、テキストに書いておいて、SOURCE コマンドで走らせると言うことですか?
mysqlimportでは、ファイル名に変数が使えるのでしょうか?
どうぞよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- XML PHP.laravelについて 1 2023/07/06 15:26
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) VBA初心者です。電話番号の数字の前に0を表示させたいです。 2 2022/12/14 03:58
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
- Access(アクセス) CSVファイルの「0落ち」にVBA 6 2023/02/02 15:27
- Excel(エクセル) CSVファイルでVBAを動かす方法 3 2023/04/04 10:22
- Excel(エクセル) Excelについて。 Excelからcsv変換したいのですが、 やり方はファイル→名前をつけて保存→ 7 2022/07/27 01:10
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sql*loader 数値のロード
-
CSVを1行しかインポートしない...
-
作成したレコードセットのCSV出...
-
BCPコマンドについて
-
データのインポート、エクスポ...
-
データベースファイル(.db)を開...
-
PL/SQLで@ファイル名が反応しま...
-
あるDBから別のDBのテーブルをs...
-
SQLです。あってますか?↓
-
mysqlにおけるホストのパーセン...
-
複数行をINSERTで『ORA-00911: ...
-
SQLServerのselect文でデータ数...
-
数字で「そ」と「り」
-
SQLデータベースへのリンクがあ...
-
mySQLのデータベースにhtmlのコ...
-
お世話かけますが、エラー内容...
-
ODBCを使用する場合のファイルD...
-
PHP+MySQL 内部結合(INNER_JOIN...
-
同じSQL文で極端に検索が遅くな...
-
sql merge文について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
sql*loader 数値のロード
-
作成したレコードセットのCSV出...
-
MySQL Date型にNULLが設定でき...
-
CSVを1行しかインポートしない...
-
BCPコマンドについて
-
MySQLで連続csvファイルを読み...
-
phpmyadminでcsvインポートで文...
-
sqlite3でcsvのインポートがで...
-
BAT処理でCSVデータのインポート
-
【Access2000VBA】CSVファイル...
-
CSVインポート,日本語文字化け
-
CSVファイルのインポートについて
-
MySQLのLOAD文を使ってCSV...
-
MySQLにEXCELやCSVなどでの一括...
-
データベースファイル(.db)を開...
-
PL/SQLで@ファイル名が反応しま...
-
あるDBから別のDBのテーブルをs...
-
PL/SQLをWindowsのBATファイル...
-
html上でMySQLにアクセス(Java...
-
同じSQL文で極端に検索が遅くな...
おすすめ情報