カラム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へのコネクションの設定が一つは作られているはずですが,なかったら作ってあげてください).
左側のバーのSchemaを選択,Tableを右クリックして,crearetableしてあげてください.
そして,上のように設定し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
にすると良いという情報もあるみたいですが,僕の場合できませんでした.