CSVファイルやTSVファイルはさまざまなデータを格納できるデータベース的な構造を持つテキストファイルですが、データベースで使用できる便利なSQL言語は使用することができません。
表計算ソフトに取り込んでデータを活用することはできるものの、SQLに慣れ親しんだ方ならば、SQLを使って直接作業したいと思った経験のある方も多いでしょう。
本日紹介する「TextQL」はこのアイデアに基づいて開発されたコマンドラインツールです。サンフランスのソフトエンジニアPaul Bergeron氏によって作成されたGo言語製のオープンソースソフトとなっています。
SQLiteでCSVファイルを取り込んでも同じような作業が可能ですが、次に示すような違いがあるとのことです。
- sqliteインポートは標準入力を受け取らずUNIXパイプを破壊する
- textqlはクオートでエスケープされたデリミタをサポートする
- textqlはsqliteのメモリデータベース機能を活用し必要な場合だけディスクにアクセスする
以下使用方法を説明します。
TextQLのインストール方法
Macの場合Homebrewを使用してインストールするのが簡単です。
brew install textql
公式サイトにはソースからビルドする方法や、Dockerで使用する方法など、その他のインストール方法も掲載されています。Mac以外で使用する場合などは参考にしてください。
TextQLの使用方法
まず使用するデータファイルとしてsample_data.csvを準備します。
id,name,value,timestamp 3,山田,5,1440378750 1,田中,16,1440378790 2,鈴木,-3,1440378668
このファイルに対して行数を問い合わせるSELECT文などが使用できます。
$ textql -sql "select count() from sample_data" sample_data.csv 4
1行目のヘッダーを除外したい場合「-header」オプションを追加します。
textql -header -sql "select count() from sample_data" sample_data.csv 3
maxで最大値を求めることもできます。
$ textql -header -sql "select max(value) from sample_data" sample_data.csv 16
SQLite形式のDBに保存したり、別のCSVファイルに保存したりといった処理も可能です。
# SQLite形式で保存 $ textql -save-to ./output.db -header -sql "id, name order by timestamp" sample_data.csv 2,鈴木 3,山田 1,田中 # sqlite3で操作 $ sqlite3 ./output.db "select * from sample_data" 3|山田|5|1440378750 1|田中|16|1440378790 2|鈴木|-3|1440378668 # 別のCSVで保存 $ textql -output-file ./output.csv -header -sql "id, name order by timestamp" sample_data.csv $ cat output.csv 2,鈴木 3,山田 1,田中
SQLに慣れた方ならばそれほど難しくない操作だと思います。各種コマンドは省略形も使用できるようです。詳しくは公式サイトの動画でご確認ください(ドキュメントは無し?)
まとめ
TextQLを使用すれば、SQLを使用して直感的にCSVやTSVファイルを操作することができます。CSVやTSVを扱う機会が多く、かつSQLに慣れている方は試してみてはいかがでしょうか。