/home/by-natures/dev*

データ界隈で働くエンジニアとしての技術的なメモと、たまに普通の日記。

備忘録:MySQL への CSV データのロード

プログラムでロードすることはあっても、SQL から直接ロードすることがあまりないので、備忘録です。SET 構文が柔軟で便利です。

  • データベースは MySQL
  • テーブルは既に作成済みの場合を想定
  • テーブルのカラム順と、CSV のカラム順は異なる
  • Boolean, Date 型を上手く変換したい
is_matched,key1,gen_date
False,1001,2014-01-24 01:55:06
True,1002,2014-02-01 13:00:00
True,1003,2014-02-12 09:31:22
CREATE TABLE TableA (
  key1       INT NOT NULL PRIMARY KEY,
  gen_date   DATETIME,
  is_matched BOOLEAN
);
LOAD DATA INFILE './data.csv' INTO TABLE TableA
     FIELDS TERMINATED BY ','
     LINES  TERMINATED BY '\n'
     IGNORE 1 LINES           # ヘッダ行を飛ばす
     (@f1, key1, @f3)         # 2列目は変換をしないため、直接フィールド名を指定する
     SET is_matched = IF(@f1='False',0,1),
         gen_date   = STR_TO_DATE(@f3, '%Y-%m-%d %H:%i:%s');