[MySQL] LOAD DATA LOCAL INFILE でCSVをインポート
CSV ファイルのデータを MySQL データベースにインポートする方法。
大量のデータを、高速に取り込むことができるという。
Contents
構文
[] に囲まれているのは省略可。
LOAD DATA LOCAL
INFILE 'ファイル名'
[REPLACE | IGNORE]
INTO TABLE テーブル名
[FIELDS
[TERMINATED BY '区切り文字']
[[OPTIONALLY] ENCLOSED BY '囲み文字']
[ESCAPED BY 'エスケープシーケンス' ]
]
[LINES TERMINATED BY '行の改行文字']
[IGNORE 数値 LINES]
[(@CSVの項目値を格納する変数, ...)]
[SET DBのカラム名 = @CSV変数 または 任意の値, ...]
REPLACE : 主キーやユニークキーが重複した場合、入力値で書き換えられる。( DELETE → INSERT される。)IGNORE : 主キーやユニークキーが重複した場合、スキップされる。(書き換えられない。)LINES : 行の改行文字。デフォルト値は '\n' 。FIELDS : 区切り文字。デフォルト値はタブ。@CSVの項目値を格納する変数 : ここで指定した変数に CSV の項目値が左から順に格納される。変数名は @ + なんでもいい。
CSV ファイルをインポート
CSV ファイルのデータが、左から順にカラムに挿入されていく。
LOAD DATA LOCAL INFILE 'hoge.csv' INTO TABLE sector FIELDS TERMINATED BY ',';
特定のカラムにインポート
インポートするカラムを指定する方法。
LOAD DATA LOCAL INFILE "CSV ファイルパス"
INTO TABLE テーブル名
FIELDS TERMINATED BY '区切り文字'
[LINES TERMINATED BY '行の改行文字']
[IGNORE 1 LINES]
(@1,@2,@3)
SET columnA=@1, columnB=@3;
CSV ファイルにない値を挿入
CSV にはない、任意の値を挿入する。
LOAD DATA LOCAL INFILE "CSV ファイルパス"
INTO TABLE テーブル名
FIELDS TERMINATED BY '区切り文字'
[LINES TERMINATED BY '行の改行文字']
[IGNORE 1 LINES]
SET columnA=任意の値;
条件分岐させる場合
CASE 文を使う。
(@1,@2,@3)
SET columnA=CASE @2
WHEN 条件値1 THEN 処理
WHEN 'hoge' THEN NULL
ELSE @2
END,
columnB=@3;
CSV に囲み文字があったりなかったりする場合
大部分が囲み文字なしだが、値に「カンマ(,)」が含まれる場合のみダブルクォートで囲まれているとき。ENCLOSED BY を使う。 OPTIONALLY はあってもなくても同じ結果だった。
[OPTIONALLY] ENCLOSED BY '\"'