MySQL の LOAD DATA INFILE ステートメントが爆速だった話
スポンサーリンク
こんにちは。racchai です。
先日、巨大な CSV ファイルを mysql にインポートしたいんだけどっていう相談を受けまして
まあデータ入れるだけだしと思って深く考えずに引き受けたわけです。
で、さくっと書いたプログラムがどうも1日かかっても終わらない。。
仕方ないのでバルクインサートするように書き換えてみたものの、やっぱり半日くらいかかっちゃう。
「これデータがでか過ぎるんだよね」とか自分のせいじゃないよアピールをしてみたものの、このままでは恥ずかし過ぎる。。
ということで詳しい人に相談してみたところ
「LOAD DATA INFILE 試した?」
って返ってきた。
「あーはいはい、LOAD DATA INFILE ね。知ってた知ってたーそういやまだだったわー忘れてたわー」
と地獄のミサワ風に知らなかったことを誤魔化し、帰宅後光の速さでググりました。
どうやらプログラム書く必要すらなくて mysql のクエリ内で CSV ファイルを直接指定してロード可能という素敵ステートメントがあるらしい。
で、mysql のマニュアルを見つつ以下のようなクエリを組み立てて軽い気持ちで叩いてみたわけです。
mysql> LOAD DATA LOCAL INFILE /tmp/bigdata.csv INTO TABLE bigdata CHARACTER SET UTF8 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 LINES (column1, column2);
一応クエリの解説しておくと、改行コードが\n
な /tmp/bigdata.csv
という CSV ファイルを先頭行を無視して bigdata
テーブルにロードするってことをしてます。
どうせ明日までかかるだろうと思って風呂に入り、出てきたところで画面を見たら・・・
なんじゃこりゃあ!終わってるやないか!
なんと5分弱で終了してました。速い。速すぎる!
いままでこんな便利な機能を知らなかったのかと、己の無知を恥じました。
データがでかすぎるんだよとか言ってごめんなさい。もっと勉強します。
- 作者: Baron Schwartz,Peter Zaitsev,Vadim Tkachenko,菊池研自,株式会社クイープ
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/11/25
- メディア: 大型本
- この商品を含むブログ (7件) を見る