###前提・実現したいこと
1億行のCSVファイルを扱うために、MySQLを用いてデータベースで処理しようとしています。
1億行という大規模なファイルであるために、そのまま読み込もうとしても非常に時間がかかってしまい、良い方法を見つけるのに苦労しています。
###発生している問題・エラーメッセージ
読み込みスピードが遅く、現実的な時間では終わらない。
###試したこと
1億行のCSVファイル(hogehoge.csvとする)を、読み込んでテーブルに入れようとしています。
はじめは、テーブルを作成した後に以下のコードを試みました。
SQL
1LOAD DATA LOCAL INFILE "hogehoge.csv" 2INTO TABLE table FIELDS TERMINATED BY X'09'
しかし、丸一日経過すれど処理が進まなかったため、1億行のファイルを、10000行×10000ファイルに分割して順番に読み込むことを試みました。
hogehoge.csvを、splitを用いてシェル上で分解し、table.00000.csv ~ table.09999.csvという10000個のファイルに分割した後、以下のコードを実行しました。
mysqlimport -L -u root -p database table.*
しかし、これでも1つのcsvを読み込むのに45秒程かかっているため、仮にそのペースが最後まで続いても125時間はかかってしまいます。
このような巨大なCSVを高速に読み込む良い方法はないでしょうか。
LOAD DATA INFILEではなく、INSERTやMultiple INSERTと呼ばれる手法もあるようですが、1億行を処理するにあたってどちらが優れているのか判断しかねています。
Multiple INSERTを用いる場合は、MySQLとは別に、複数のレコードを同時に挿入するべく、SQLのスクリプトを作成する作業が必要だと考えているのですが、その認識は正しいでしょうか。
###参考にしたサイトなど
http://naoberry.com/tech/mysqldata/
https://qiita.com/saoyagi2/items/f37ae0d32edd06ec8c4c
http://nekopuni.holy.jp/2014/03/mysqlpython8000%E4%B8%87%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92insert%E3%81%99%E3%82%8B/

