textqlが超便利


これは何?

  • CSVファイルをSQLの構文で扱えるツール

ソースはこちら

なにが良いのか

  1. DB作らなくて良いので環境構築が楽
  2. 軽快動作
  3. パイプで他のコマンドに繋げられる

事前知識・必要スキル

  • SQLの文法と使いかたを知っている
  • コンソール上からコマンドを使って標準出力ができる
  • CSVのフォーマットを知っている

ここまでで問題なければ、あっさり使えるはずです。

インストール

 brew install textql

使い方

試しにまずこんなCSVだったとします

sample1.csv
id,name,age
1,"aaa",12
2,"bbb",13
3,"ccc",14
4,"cdc",15
5,"cee",16
6,"ffc",17

こんなコマンドを実行します

textql -header -sql "select * from sample1 where age=14" sample1.csv

出力

3,ccc,14

あっさり。

集計処理だって・・・

textql -header -sql "select sum(age) from sample1" sample1.csv

出力

87

LIKEも勿論

textql -header -sql "select * from sample1 where name like '%d%'" sample1.csv

出力

4,cdc,15

INNER JOINなんかも

sample2.csv
id,food
1,"🍛"
2,"tempra"

コマンド

textql -header -sql "select * from sample1 as s1 inner join sample2 as s2 on s1.id=s2.id" sample1.csv sample2.csv

出力

1,aaa,12,1,🍛
2,bbb,13,2,tempra

SQLに慣れている人はあっさり使えて軽快動作!

コマンドライン上で動くので、標準入出力を使ってパイプでつなげることもできます。
一番の魅力はここかもしれない。

冗長なので書いていませんが、GROUP BYやCOUNTも使えたので、
例えば、ちょっとした集計処理の必要に駆られた時などが出番です。

もちろん、パフォーマンスを気にするくらいのデータ量がある本気の集計にはDB使えよという話です。

追記:

  • パフォーマンスは調べていません。パフォーマンスを気にするようならDBを使うようにしましょう
  • jsonv.shなるものがあり、JSONをCSVにしてくれるそうな。パイプでつなげるだけで夢が広がりますね

参照サイト