はじめに
別の場所から取得したデータ同士をIDでJOINしたいけど、SQL使いたいためだけにDB入れるのも面倒だし、JOINだけのためにプログラム書くのも嫌だなという考えから、csvデータに対してSQLを実行する方法を調べ、使いやすかったものを記しておくに至りました。
方法
dsq というツールを使うだけです。
csv sql
とかcsv query
で検索すると他にもいくつか使えそうなライブラリが出てくるのですが、導入のしやすさや使い方のシンプルさから私的には dsq
が一番使いやすいなと感じました。
インストール方法はREADMEをご参照ください。
使い方
SQLの構文は基本使えるようですが簡単なJOINだけ書いておきます。
※ 使ったデータ(テキトーデータです)
id,name
1,tomato
2,banana
(省略)
...
store_id,product_id,sales
1,1,123000
1,2,290000
1,3,310000
(省略)
id
1
5
(省略)
INNER JOIN
以下のように、引数もシンプルでわかりやすいです。
SQL内のFROMの後のテーブル名は、N番目に指定したcsvを{N}
のように書くだけです。
dsq product.csv sales.csv \
"SELECT product.id AS product_id, product.name AS product_name, sales.store_id AS store_id, sales.sales AS sales FROM {0} product JOIN {1} sales ON product.id = sales.product_id"
csvが3つ以上でもふつうに使えます。
dsq product.csv sales.csv store.csv \
'SELECT product.id AS product_id, product.name AS product_name, sales.store_id AS store_id, sales.sales AS sales FROM {0} product JOIN {1} sales ON product.id = sales.product_id WHERE store_id IN (SELECT id FROM {2})'
OUTER JOIN
READMEには特に何も書いてなかったのですが、OUTER JOINも使えました。
dsq product.csv sales.csv \
"SELECT product.id, product.name, sales.sales FROM {0} product LEFT OUTER JOIN {1} sales ON product.id = sales.product_id"
ただ、RIGHT OUTER JOIN
を試してみたところ、RIGHT and FULL OUTER JOINs are not currently supported
となってダメでした。FULL JOIN
もダメのようです。エラーメッセージ的に中身はSQLiteなのかもしれないです。
おわりに
SQLの練習にも使えるなと思いました。
Web上で気軽にSQLを試せるサービスもありますが、データをDDLで定義しなきゃいけなかったりすることが多い印象なので、こちらの方が手軽ではと感じます。