Born Too Late

Yuya's old tech blog.

SELECT 結果からサクッと表を生成する Tablr というのを書いた

2012-02-12 19:21:27

先週はビッグデータ時代の非ビッグデータ戦略として, MySQL でサクッと MapReduce する話を書きました.
しかしよく考えると, 非ビッグデータを前提とする以上は, やはり普通に GROUP BY とかで済ませてしまうのがよりカジュアルと言えます.

しかしそれをどう見せるか, ということを気にしだすと, これが何気にめんどくさい.
集計時にメールで報告しつつ, 管理ツールのダッシュボード的な画面でも閲覧可能にしたい, という要求はどこにでもあると思いますが, そのときどきで書いていると, クエリを書く何十倍もの時間がかかってしまったりします.

そこで, 例えば RDBMS の結果セットを与えると, それをサクッと見やすく出力してくれる Tablr というのを書きました.
The MIT License にて GitHub で公開しています.

yuya-takeyama/Tablr - GitHub

今どき PHP5.2 で書かれていますが, その辺は何となく察して下さい.
大した機能は無いですが, 個人的にはこれで日頃の問題をいくつか解決できそうなので, 明日からの仕事に使っていく予定です.

使用例

以下は二次元の配列をもとに, プレーンテキストの表を出力するスクリプトです.

ちょっと長く感じますが, require_once や表のデータの部分を除けば, 表の出力に関しては 5 行ほどしかありません.
ここではデータを直接記述していますが, 実際は RDBMS に対して SELECT クエリを発行したときの結果セット等を与えることを想定しています.

これを実行すると以下のような表が出力されます.

以下では Tablr の機能についてより詳細に紹介します.

フォーマッタ

二次元の配列をもとに, いくつかの形式に出力するためのものです.
これが Tablr を作りにあたっての一番のモチベーションとなっています.

現在利用可能なフォーマッタは以下の 2 つのみとなっています.

アグリゲータ

それぞれのカラムで集計を行い, テーブルのフッタにその行を追加します.
現在利用可能なアグリゲータは以下の 2 つのみとなっています.

とりあえず必要最低限の機能を実装した, という感じで, 作り込みはかなり甘い感じです.
使えそうな感じであれば, またさらに改善して行きたいと思います.