SQLite3の検討

日次で出力される、支店別売上げのcsvデータがあるとする。yyyymmdd.csvというファイル名で、「支店コード」「支店地区名」(カンマを含むことがある)「売上げ」の3項目が入っているものとする。このデータを1ヶ月分とか1週間分とか支店別に集計したり、曜日別の傾向を見るなど、いろいろと加工したい。

当初は、ちまちまとPerlスクリプトを作っていたのだが、色々な集計をtrial & errorで実行したくなってくると(曜日別に集計して、イマイチ傾向がなさそうなので、所属地区を絞ってみようとかそういう感じ)、いちいちPerlスクリプトを作ったり直したりするのは効率が悪く感じるようになった。そこで、SQLを使える環境を検討してみた。

上記の通り、基本的に自分の作業用であり、データ量もそれほど多くないことから、MySQLPostgreSQLなどのクライアント・サーバタイプのDBMSは大げさすぎるし、これだけのためにサーバを構築するのも面倒だったので、単体で動作するSQLite3なるものを調べてみた。日本語の情報源としては、SQLite3をつかってみようが分かりやすかった。

自分にとっての利点は以下の通り。

ただ、調査の結果、以下の欠点が判明したので、導入を躊躇している。

  • データ中にカンマを含むcsv(カンマを含むデータは、ダブルクオートで囲まれている)が扱えない。事前にTAB区切りにでも変更する必要がありそう。Perlを使ったcsv2tsvというスクリプトは発掘した。
  • 日付型がない。もちろん、DB中にはExcel風に1970/1/1からの経過日数としてINTEGER型で保持しておくなど、色々な対応は可能。ただ、SQLite3の日付関係の関数のドキュメントがほとんどなく、実際に日付をどう扱えば便利なのかが分からない。日付による絞込みを頻繁に使うので、そのたびに select datetime(dateval) where dateval > datetime("2008-10-15") などと書くのは面倒だし。

次は、MySQLを検討してみるつもり。XAMPPがあるので、実はサーバ構築しなくてもすぐに使えることを思い出したので。