CUBE SUGAR CONTAINER

技術系のこと書きます。

SQLite3 のテーブルに CSV でデータを読み込む

メモリに乗り切らない程度のちょっとした集計をするのに SQLite3 のデータベースを使うのが意外と便利だなーと思っている今日このごろ。 サポートされている SQL の構文や関数が少ないするのはネックだけど、まあ手軽さには変えられないという感じ。 今回は SQLite3 のテーブルに CSV のデータをインポートする方法について書いておく。

使った環境は以下の通り。

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.14.3
BuildVersion:   18D109
$ sqlite3 --version                                        
3.24.0 2018-06-04 14:10:15 95fbac39baaab1c3a84fdfc82ccb7f42398b2e92f18a2a57bce1d4a713cbaapl

まずは読み込む CSV ファイルを用意する。

$ cat << 'EOF' > users.csv 
1,Alice,20
2,Bob,30
3,Carol,40
EOF

SQLite3 のデータベースファイルを作る。

$ sqlite3 users.db

CSV ファイルにあわせてテーブルの定義を用意する。

sqlite> CREATE TABLE IF NOT EXISTS users (
   ...>   id INTEGER PRIMARY KEY,
   ...>   name TEXT NOT NULL,
   ...>   age INTEGER NOT NULL
   ...> );

データの区切り文字をカンマ (,) にしたら .import 命令を使って CSV ファイルをテーブルに読み込む。

sqlite> .separator ,
sqlite> .import users.csv users

ちゃんと読み込まれているか確認しよう。

sqlite> .headers on
sqlite> SELECT * FROM users;
id,name,age
1,Alice,20
2,Bob,30
3,Carol,40

ばっちり。