SQLiteを今まで使ったことが無かったのですが、先日ExcelでSQL的なことをしようとして思うように書けず辛かったのでSQLiteへデータを流し込んでSQLのクエリで集計しました。
SQLiteはPostgreSQL, MySQL等と比較すると気軽にデータを格納・集計できるので、普段ExcelよりSQLを書く機会が多い方は使ってみるのもアリだと思います。
以下でCUIからSQLiteを使う際の基本的な使い方をまとめてみました。
RDBMSの1つで、以下のような特徴を持ちます。
- 1つのデータベースを1ファイルで取り扱う
- サーバを立てる必要がない
- メモリ消費量が少ない
今回はWindows(Windows 11 Home (22H2))での利用を想定します。macOSだと嬉しいことにデフォルトでインストールされているようです。
WindowsのCUIからインストールする場合、パッケージマネージャーであるChocolateyが便利です。
使い方は以下の公式ページからどうぞ。
chocolatey.org
$ choco install sqlite
インストールされているかどうか、以下のコマンド等で確認しましょう。
$ sqlite3 --version
3.40.0 2022-11-16 12:10:08 89c459e766ea7e9165d0beeb124708b955a4950d0f4792f457465d71b158d318
Chocolateyでインストールする際「管理者として実行する」必要になりますので、コマンドプロンプトやGit Bashは予め「管理者として実行する」ようにしてください。(よくハマりました)
データを流し込む
まずは予めSQLiteに読み込むCSVを用意してください。
今回は例として以下のようなCSVを用意しました。
users.csv
id,name,address
1,yamashita,kyoto
2,tanaka,osaka
3,okamoto,hokkaido
用意ができたら以下のコマンドでSQLite側にCSVデータを読み込みます。
$ winpty sqlite3 test.sqlite3
$ winpty sqlite3
sqlite> .separator ,
sqlite> .import users.csv users
sqlite> SELECT * FROM users;
1,yamashita,kyoto
2,tanaka,osaka
3,okamoto,hokkaido
sqlite> .schema users
sqlite> .exit
$ ls
test.sqlite3 users.csv
SQLiteではDBが1つのファイルとして扱われます。お手軽ですね。
*.sqlite3が作成されたら、以後はwinpty sqlite3 *.sqlite3
で既存のDBに接続して利用できます。
DBに接続してしまえば、あとはSQLでデータを集計できますので、GROUP BYなりWHEREなりを書いて良い塩梅になるようデータを加工しちゃえばOKです。
※Git Bashを使う場合、頭にwinptyを付けないと正しく動作しません。winptyについては下記の記事で少し書きました。
tm-progapp.hatenablog.com
SQLの実行結果を出力する
DBでデータを加工したらそれを出力したい!という場面もあるかもしれません。
その場合は以下のように.output
を使います。
sqlite> .separator ,
.headers on
.output output.csv
SELECT * FROM users WHERE name IN ('tanaka', 'okamoto');
$ cat output.csv
id,name,address
2,tanaka,osaka
3,okamoto,hokkaido
.output {出力ファイル名}.csv {SQL文}
でクエリの実行結果が出力されます。
.headers
はヘッダ行が必要な時だけ記述すればOKです。
あとがき
SQLiteはSQLで集計したいけどサーバを立てるほどのことでもないな…という時はおすすめです。
自分はエクセルの関数を駆使した集計が得意ではないので、SQLiteの方が書きやすいなーという感想です🤤