DB

MySQLのLOAD DATAで空白の代わりにnullをセットしたい

MySQLのLOAD DATAで空白の代わりにnullをセットしたい

MySQLのLOAD DATAで空白の代わりにnullをセットしたい。
CSVを高速にインポートするLOAD DATA INFILEコマンド。
そのロード時にブランク(空白)が入るのを避ける方法を紹介する。



LOAD DATAコマンドとは

LOAD DATA INFILE コマンドはCSVファイルなどのテキストファイルの内容を、高速にMySQLのテーブルに取り込むコマンドである。

LOAD DATA INFILE ステートメントは、非常に高速にテキストファイルからテーブルに行を読み取ります。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.2.6 LOAD DATA INFILE 構文


通常はブランク(空白)がセットされる

ロードする際、CSVの中に何も無い空白のセルがあると、nullではなくブランク(空白)として取り込まれる。
以前記事に書いたように空白とnullは判定条件がややこしいので混在させない方が良い。

MySQLで空文字(空白、ブランク)カラムを置換する


ブランク(空白)の代わりにnullをセットする方法

ブランク(空白)の代わりにnullをセットするには nullif を使う。
SQL文で利用できる関数はLOAD DATA INFILEコマンドでも有効なので、 nullif で空白をnullに置換してしまえば空白の代わりにnullを挿入できる。

LOAD DATA INFILE "ファイルパス"
INTO TABLE テーブル名
FIELDS
  TERMINATED BY ','
LINES
  TERMINATED BY '\r\n'
IGNORE
(@csv_col1, @csv_col2, @csv_col3)
SET
  table_col1 = nullif(@csv_col1,""),
  table_col2 = nullif(@csv_col2,""),
  table_col3 = nullif(@csv_col3,"")
;

参考:
MySQLのload dataで日付型にnullをセットする - 文系プログラマによるTIPSブログ


まとめ

  • MySQLのLOAD DATAで空白の代わりにnullをセットするには nullif を使う


KRSW

駆け出し機械学習エンジニア。機械学習、DB、WEBと浅く広い感じ。 Junior machine learning engineer. Not a specialist but a generalist who knows DB, WEB too.

役に立ったらシェアしてくれると励みになります。

にほんブログ村 IT技術ブログへ

-DB
-

Translate »

© 2021 ITips