いまさら csvq が便利という話

最近の便利だったツール小話.csvq が便利という話.

csvq

mithrandie.github.io

csvqCSVSQL で操作できるツールで jqCSV 版 (変な表現). 有名なのに使ったことがなかった.

具体的にどう便利だったかというと, したごしらえしておいた CSV を手元でいじくり回すのに使っていて, 公開日のセルを一律 +1 ヶ月したりとか,なにがしを GROUP BY して SUM して集計するみたいな,ごく簡単なもの.

mithrandie.github.io

cwdmy_data.csv があるとする:

id,date1_from,date2_from
0,2020-04-01T00:00:00+09:00,2020-11-05T10:00:00+09:00
1,2020-06-05T12:34:56+09:00,2051-01-12T12:12:12+09:00

これに対して操作するときは,

UPDATE `my_data`
SET    date1_from = ADD_MONTH(date1_from, 1),
       date2_from = ADD_MONTH(date2_from, 1)
;
COMMIT;
$ csvq -s my_update.sql

とできる.オプションをつけなければインタラクティブシェルになるので,こっちのほうが楽.

CSV はファイル名をテーブルっぽく指定して扱える.スキーマはいらず 1 行目がカラム名になる.オンメモリで処理されて,2万行は少なくとも問題ない.

大した操作ではないのだけれど,大したことない処理だからこそスクリプト書きたくもないし,かといって手で変更するのも疲れるケースで活躍する.Excel のマクロは書けないが SQL が書ける人は多いし,それは僕.

直接 DB 操作はできないし,かといってローカルの MySQLCREATE TABLE して LOAD DATA INFILE... するもの面倒だし,Excel でマクロとかもちょっとパッと書けないし,スクリプトと書くのもちょっとみたいな限定的なケースで便利.

ところで,

てっきり実装として :memory:SQLite のデータベースに CSV をインポートしてやりとりしているものかと思ったが,どうやらそういうわけではなく丁寧なもののようだった.

なにかと,

CSV がポータブルなデータ入稿フォーマットになっているのは,

  • たいていの人にとって扱いやすい (Excel)
  • プレーンテキスト

というみなまでいわずともわかる利点から,どこの現場にいっても人々のデータのやりとりに使われているのを目撃している.管理ツールとかも CSV を食べさせるものも多いのだった.

なので,プログラマーでなくとも CSV と楽に付き合えるようになるのが汎用らくらくポイントなのだと思った.