最近の便利だったツール小話.csvq
が便利という話.
csvq
csvq
は CSV を SQL で操作できるツールで jq
の CSV 版 (変な表現).
有名なのに使ったことがなかった.
具体的にどう便利だったかというと,
したごしらえしておいた CSV を手元でいじくり回すのに使っていて,
公開日のセルを一律 +1 ヶ月したりとか,なにがしを GROUP BY
して SUM
して集計するみたいな,ごく簡単なもの.
cwd
に my_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 操作はできないし,かといってローカルの MySQL で CREATE TABLE
して LOAD DATA INFILE...
するもの面倒だし,Excel でマクロとかもちょっとパッと書けないし,スクリプトと書くのもちょっとみたいな限定的なケースで便利.
ところで,
てっきり実装として :memory:
な SQLite のデータベースに CSV をインポートしてやりとりしているものかと思ったが,どうやらそういうわけではなく丁寧なもののようだった.
なにかと,
CSV がポータブルなデータ入稿フォーマットになっているのは,
- たいていの人にとって扱いやすい (Excel)
- プレーンテキスト
というみなまでいわずともわかる利点から,どこの現場にいっても人々のデータのやりとりに使われているのを目撃している.管理ツールとかも CSV を食べさせるものも多いのだった.