キュアセブン技術ブログ

考えたこと,学んだことを書きます

mysqlでcsvを新規テーブルにインポートする

mysqlのversionは5.7.19 14.14(<-mysql コマンドのバージョン)です.

mysqlに入る

$ mysql --local_infile=1 -u root
--local_infile=1はエラー対策です.

$mysql -u root

で入って

mysql> LOAD DATA LOCAL INFILE ‘filename.csv’ INTO TABLE table_name FIELDS TERMINATED BY ‘,’ ENCLOSED BY ’“;

をした時に

ERROR 1148(4200): The used command is not allowed with this MYSQL version

と出てしまう!

参考:

忘れがちな記憶へ ERROR 1148 (42000): The used command is not allowed with this MySQL version問題

使うDBを作成する

mysql> CREATE DATABASE database_name;

csvを入れるためのテーブルを作成する

この時カラムなども指定する. 

mysql>CREATE TABLE database_name.table_name( col_name1 data_type1, col_name2 data_type2, ... );

使うデータベースを指定する

mysql> USE database_name;

これをしないと

ERRER 1046 (3D000):No database selected

って出た.

 csvをインポートする

mysql> LOAD DATA LOCAL INFILE ‘filename.csv’ INTO TABLE table_name FIELDS TERMINATED BY ‘,’ ENCLOSED BY ’“;

できたらこのような表示が出て終了!

Query OK, 2279299 rows affected, 65535 warnings (9 min 29.76 sec)
Records: 2279299 Deleted: 0 Skipped: 0 Warnings: 4558602 

めっちゃインポートした!200万レコード..

 

【おまけ】試しに最初の10列を表示してみる

mysql> SELECT col_name1,col_name2 FROM table_name ORDER BY col_nameN LIMIT 10;

で表示できる.

 

追記

別のPCで同じ作業をやる事になったのでこの通りにやってみたが再現性がなかった.

ERROR 1148 (42000): The used command is not allowed with this MySQL version

というエラーに対して,

@@local_infileを1にする事で解決した.

@@local_infileの確認

SELECT @@local_infile;

1に変更

SET PERSIST local_infile= 1;

f:id:shiningcureseven:20181025125128p:plain

日々の覚書: MySQL 8.0でLOAD DATA LOCAL INFILEが "ERROR 1148 (42000): The used command is not allowed with this MySQL version" で失敗する時