TextQL - CVSファイルに対してSQLを実行できるコマンドラインツール

S 20180423 204550

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,田中
S 20180423 204810

SQLに慣れた方ならばそれほど難しくない操作だと思います。各種コマンドは省略形も使用できるようです。詳しくは公式サイトの動画でご確認ください(ドキュメントは無し?)

まとめ

TextQLを使用すれば、SQLを使用して直感的にCSVやTSVファイルを操作することができます。CSVやTSVを扱う機会が多く、かつSQLに慣れている方は試してみてはいかがでしょうか。

スポンサーリンク