GO製 csvq
いつも使えそうなツールをチェックしているのだけれど、久々に使えるものを入手した。
csvファイルをDBのように扱い、sqlで操作可能にする。
インストールはBinaryをダウンロードしてPATHの通ったところに置いて完了。
ちなみに、他の人はどうしているのか分からないけれど、どこに置くのかというのはいつも悩ましい所。
まあ、マルチユーザの場合、パッケージなどで入れたものは、/usr/bin以下に入るだろうし、buildするタイプなどで作法の良いものなら/usr/local/binなどに入れるのが普通だろうなぁ。
自分の場合は、個人で使用する場合や自作のもので、一時的に使うモノは、~/bin というフォルダを作成していて、ここにポイッと入れて動作テストなどしている。
もちろん、PATHを通しておく必要が有る…。
さて、解凍してcsvqをbin以下に入れれば即実行できる。
こいつ強力すぎる!
実際に試してみると、こいつは便利だ。
試しに次のようなデータを作成してテストしてみた。(user.csvとscore.csv)
データを一覧したければ、
$ csvq
> select * from user;
+----+--------+-----+-------------+
| id | name | age | tel |
+----+--------+-----+-------------+
| 1 | user1 | 20 | 01011112222 |
| 2 | user2 | 21 | 01011113333 |
| 3 | user3 | 22 | 01011114444 |
| 4 | user4 | 23 | 01011115555 |
| 5 | user5 | 24 | 01011116666 |
| 6 | user6 | 25 | 01011117777 |
| 7 | user7 | 26 | 01011118888 |
| 8 | user8 | 27 | 01011119999 |
| 9 | user9 | 28 | 01022221111 |
| 10 | user10 | 29 | 01022222222 |
+----+--------+-----+-------------+
まんま、mysqlコマンドと同じような表示をしてくれる。
> select * from score;
+----+---------+-------+------------------+
| id | user_id | score | date |
+----+---------+-------+------------------+
| 1 | 2 | 100 | 2019/3/12 10:00 |
| 2 | 4 | 200 | 2019/3/12 10:15 |
| 3 | 6 | 300 | 2019/3/12 10:30 |
| 4 | 8 | 400 | 2019/3/12 10:45 |
| 5 | 10 | 500 | 2019/3/12 11:00 |
| 6 | 1 | 600 | 2019/3/12 11:15 |
| 7 | 3 | 700 | 2019/3/12 11:30 |
| 8 | 5 | 800 | 2019/3/12 11:45 |
| 9 | 7 | 900 | 2019/3/12 12:00 |
| 10 | 9 | 1000 | 2019/3/12 12:15 |
+----+---------+-------+------------------+
この2つよく有るパターンのテーブルです。
でもって、joinしてみる。
> select * from user join score on user.id = score.user_id order by score desc;
+----+--------+-----+-------------+----+---------+-------+------------------+
| id | name | age | tel | id | user_id | score | date |
+----+--------+-----+-------------+----+---------+-------+------------------+
| 1 | user1 | 20 | 01011112222 | 6 | 1 | 800 | 2019/3/12 11:15 |
| 5 | user5 | 24 | 01011116666 | 8 | 5 | 800 | 2019/3/12 11:45 |
| 10 | user10 | 29 | 01022222222 | 5 | 10 | 700 | 2019/3/12 11:00 |
| 8 | user8 | 27 | 01011119999 | 4 | 8 | 600 | 2019/3/12 10:45 |
| 9 | user9 | 28 | 01022221111 | 10 | 9 | 600 | 2019/3/12 12:15 |
| 4 | user4 | 23 | 01011115555 | 2 | 4 | 500 | 2019/3/12 10:15 |
| 2 | user2 | 21 | 01011113333 | 1 | 2 | 400 | 2019/3/12 10:00 |
| 7 | user7 | 26 | 01011118888 | 9 | 7 | 300 | 2019/3/12 12:00 |
| 6 | user6 | 25 | 01011117777 | 3 | 6 | 200 | 2019/3/12 10:30 |
| 3 | user3 | 22 | 01011114444 | 7 | 3 | 100 | 2019/3/12 11:30 |
+----+--------+-----+-------------+----+---------+-------+------------------+
うわー、テストするだけなら、これで十分かも…。
ひょっとすると、講義でも使えるかもしれない。
DB無しで、csvファイルだけ用意して、練習するとか…。良いかも!
とりあえず、sum( ) や avg( ) などは使えるし、他にも関数は大量に用意されている。
マニュアルを見ると、こんなことまで対応しているのかと驚く。
https://mithrandie.github.io/csvq/
もちろん、selectだけでなく、insert/updateなど一通り揃っているので、手軽にテストできそう。
他には、UTF-8にもShift-JISにも対応しているようだし、JSONも扱えるらしい。
区切り記号もカンマ以外にもOKなので、テキストファイルに落とせれば何とかなりそうな気配。
SQL使いたいけど、DBインストールできない人とか、DBから持ってきたデータで検証したいとかという目的にも行けそう。
子プロセスで実行して、SQLiteの代わりに使うとか…。パイプで処理繋いでやれば何とでもなりそうで期待大(笑)
コメント
コメントを投稿
励みになりますので、簡単で良いので一言くださいませ。