
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sql*loader 数値のロード
-
BAT処理でCSVデータのインポート
-
BCPコマンドについて
-
MySQL Date型にNULLが設定でき...
-
データベースファイル(.db)を開...
-
PL/SQLで@ファイル名が反応しま...
-
あるDBから別のDBのテーブルをs...
-
utf8bomとutf8mb4の違いがいま...
-
PL/SQLをWindowsのBATファイル...
-
LinuxでFatal errorが出てしま...
-
mysqlデータベース内のuserテー...
-
phpmyadminでの特権が表示方法
-
my.ini ファイルの置き場所
-
comment on columnについてわか...
-
MySQLの実データはどのフォール...
-
ERROR 1044
-
html上でMySQLにアクセス(Java...
-
TVTestのエラーの解決方法を教...
-
本を見ながらPHPを勉強している...
-
phpmyAdminでmySQLのdumpデータ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
sql*loader 数値のロード
-
MySQLで連続csvファイルを読み...
-
作成したレコードセットのCSV出...
-
MySQL Date型にNULLが設定でき...
-
CSVを1行しかインポートしない...
-
BCPコマンドについて
-
データのインポートの速度について
-
insertを用いてテーブルにレコ...
-
MySQLデータベースにcsvファイ...
-
phpMyAdmin テキストインポート...
-
CSVファイルをインポートすると...
-
BAT処理でCSVデータのインポート
-
CSVファイルのインポートについて
-
csv形式のファイルをダウンロー...
-
access2000でインポート...
-
phpMyadminについて
-
SQLサーバーにcsv.ファイル...
-
検索できるマスターテーブルを...
-
データベースからWordpressを復...
-
データベースファイル(.db)を開...
おすすめ情報