3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MySQLに大きなcsvをいれるまで

Last updated at Posted at 2019-05-19

カラム100列で100万行以上あるcsv or tsvデータを,データベースにしようとおもうと,SQLiteだとデータがデカすぎてインポートに何時間もかかるのではないでしょうか?(さらにそれが,10,20ファイルもあると嘆かわしい・・・)
そこで,MySQLを用いてそれらのデータを簡単にインポートしてあげましょう.

MySQLのインストール

Win党

Windowsの人はこちらを参照してもらえるとよいかと.
https://www.dbonline.jp/mysql/install/
MySQL Workbench(MySQLのGUIです)も一緒にダウンロードしてください.

(以下,mac環境での解説です.Windowsの人も自分の環境にうまく当てはまるようにして,実行してみてください.)

mac党

macerは

$ brew install mysql

でOK!
Homebrewについて,知らない方は以下を参照.
https://brew.sh/index_ja

ちなみに,workbenchはbrew-caskから.
つまり

$ brew cask install mysqlworkbench

で,行けます.

コマンドライン(terminal)で,MySQLを起動させてみよう!

Terminal(コマンドライン)を起動し

$ mysql.server start

でMySQLサーバーが起動(尚,これだけではコマンドから指示は出せない).

ところが僕は最初にこれをやった時,ERRORが出ちゃいました.

$ mysql.server start
Starting MySQL
..............................................................ERROR! The server quit without updating PID file (/usr/local/var/mysql/(略).pid).

こいつが出てもMySQL使えることはあるのですが,ちゃんと直したい.大抵僕の場合

$ ps ax | grep mysql

(略)

$ kill -9 プロセスID
#このプロセスidではgrep mysqlとは関係のないものを入力し,プロセスを強制終了させる.

(参考:https://qiita.com/maimaimai5420w/items/2748b70d888aa29340c6)

で,.. SUCCESS! と出てくるようになります.

そして,コマンドラインに以下のように入力すると,起動するはずです.

$ mysql -u root
#設定,環境によっては"mysql","mysql -u root  -p"などもあり得る.

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.16 Homebrew

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

# テーブルを作ろう
今回は以下のようなデータを,テーブルにしようと思います.

名前 数学 英語 国語 志望校
佐藤 50 70 A大
鈴木 90 87 A大
高橋 67 85 76 B大
田中 49 25 30
伊藤 41 30 E大
渡辺 89 60 80 C大

このデータはタブ区切りのcsvとします.

テーブルの作成は,Workbenchが便利(だと思う.)なので,Workbenchを使っていきましょう.
起動してやり,Local instanceのSQLサーバーに接続します(大抵,インストールの際にローカルServerへのコネクションの設定が一つは作られているはずですが,なかったら作ってあげてください).

image.png
これの
image.png
を選択し,新しいSchemaを作成.

左側のバーのSchemaを選択,Tableを右クリックして,crearetableしてあげてください.
image.png
そして,上のように設定しApplyを押します.(PKは重複がある場合は押さないでください)

これで,データベース内にTableが完成しました.

コマンドラインでMySQLを操作し,csvファイルを取り込む

csvファイルはMySQL Workbenchからももちろん取り込めますが,あまり早くありません.
そこで,今回はコマンドラインから,MySQlを立ち上げてcsvファイルを取り込むことにします.

先述のようにMySQLを立ち上げましょう.そして,csvファイルを読み込みます.

mysql> use (作ったテーブルのschemaを入力)

mysql> LOAD DATA LOCAL INFILE '(csvが存在するディレクトリのパス)/seito.csv' INTO TABLE seito 

mysql> FIELDS TERMINATED BY '\t' 
#カンマ区切りの場合は','

mysql> OPTIONALLY ENCLOSED BY '"'

mysql> LINES TERMINATED BY '\n';
#Windowsの場合ですと,'\r\n'かも

でインポートできるかと.
できない場合は以下をご覧ください.

The used command is not allowed with this MySQL version" が出る場合

(参考)https://yoku0825.blogspot.com/2018/07/mysql-80load-data-local-infile-error.html

$ mysql -u root$ mysql --local-infile=1 -u rootにすると良いという情報もあるみたいですが,僕の場合できませんでした.

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?