はじめに
担当している案件でMySQLで大量(10万件規模)のデータをinsertする必要があったため、
LOAD DATA INFILE コマンドでデータをインポートした際のナレッジや調査過程をまとめました。
案件で使用していたフレームワークがLaravelだったため、Laravel寄りのリンクが多くなっていますが、
他の言語/フレームワークでも、SQLを直接発行出来る機能があれば、代用は可能かと思います。
またMySQL以外でもOracleでも同様のコマンドがあるので、DBをOracleに変えた場合でも同じ実装は可能かと思います。
注意点
MySQLの起動オプションにlocal_infileを追加
MySQLの起動オプションにlocal_infileの設定を追加します。
以下のファイルに下記のように設定を追加してください。
local_infile=true
mysql
コマンドの場合は上記のオプションを引数に追加して起動しましょう。
configファイルに追記した場合は、MySQLのサービスの再起動も忘れずに!
デバッグ/エラー解析
LOAD DATA INFILE コマンドは、MySQL側のインポート機能を直接呼び出す仕組みのため、
SELECT文やINSERT文のSQLの発行時のようにアプリケーション側のログにエラー内容が出力されることがありません。
そのため、デバッグやエラー解析は困難を極めます。
インポート先のテーブル名やカラム定義、インポートするファイル名やファイルパス等は念入りに確認しておいた方が良さそうです。
意外にtypoしていたりすると、気付かずハマります(苦笑)