LoginSignup
0
2

More than 1 year has passed since last update.

csvにSQL実行できるdsq

Last updated at Posted at 2022-10-22

はじめに

別の場所から取得したデータ同士をIDでJOINしたいけど、SQL使いたいためだけにDB入れるのも面倒だし、JOINだけのためにプログラム書くのも嫌だなという考えから、csvデータに対してSQLを実行する方法を調べ、使いやすかったものを記しておくに至りました。

方法

dsq というツールを使うだけです。
csv sql とかcsv query で検索すると他にもいくつか使えそうなライブラリが出てくるのですが、導入のしやすさや使い方のシンプルさから私的には dsq が一番使いやすいなと感じました。
インストール方法はREADMEをご参照ください。

使い方

SQLの構文は基本使えるようですが簡単なJOINだけ書いておきます。

※ 使ったデータ(テキトーデータです)
product.csv
id,name
1,tomato
2,banana
(省略)
...
sales.csv
store_id,product_id,sales
1,1,123000
1,2,290000
1,3,310000
(省略)
store.csv
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で定義しなきゃいけなかったりすることが多い印象なので、こちらの方が手軽ではと感じます。

0
2
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
0
2