はじめに
最近アルバイトでcsvファイルを触ることが多かったので、データをSQLで検索できたら便利だなと思ったので、csvファイルをSQLで操作できるようにするgem、「csql」を作成しました。
セットアップ方法
「q」のインストール
csqlはライブラリ内で「q」というコマンドラインツールを利用しているので、csqlインストール前にqをインストールする必要があります。
各OSごとのインストール方法は以下のURLに書かれています。
http://harelba.github.io/q/ja/install.html
「csql」のインストール
csqlは以下のようにgemをインストールすれば利用することができます。
gem install csql
使い方
はじめに使い方の例をあげます。
まず、例の中で利用しているtest.csvを以下のように定義します。
hoge1,hoge2
ほげ,100
ホゲホゲ,200.0
READMEに記されている例は以下になります。
require 'csql'
sql = CSQL::SQL.new('test.csv')
p sql.execute("SELECT * FROM csv") #=> [{"hoge1"=>"ほげ", "hoge2"=>"100"}, {"hoge1"=>"ホゲホゲ", "hoge2"=>"200.0"}]
p sql.execute("select hoge.hoge1 from csv as hoge") #=> [{"hoge.hoge1"=>"ほげ"}, {"hoge.hoge1"=>"ホゲホゲ"}]
p sql.execute("SELECT * FROM csv WHERE hoge2 <= 100") #=> [{"hoge1"=>"ほげ", "hoge2"=>"100"}]
p sql.execute("SELECT SUM(hoge2) from csv") #=> [{"SUM(hoge2)"=>"300.0"}]
上の例を用いて利用方法を説明します。
まず、操作したいcsvファイルのパスを引数として、CSQL::SQLオブジェクトを生成します。
その後、そのオブジェクトに対してexecuteメソッドを用いてクエリを発行すれば、結果がハッシュの配列として返ってきます。
ここで重要なのが、**「テーブル名はcsvとすること」**です。よってfrom csvは固定です(ASは使うことができます)
SQLの文法はSQLiteと同じです。
できないこと
テーブル結合
今回gemを作成した目的が、csvファイルをSQLで操作したかったからなので、複数のファイルに対する操作を考えていませんでした。
よって、現在はテーブル(ファイル)結合を行うことはできません。
挿入、更新、削除
このgemを用いてCSVファイルの内容を変更することはできません。データを参照のために利用してください。
参考URL
https://github.com/getty104/CSQL
https://rubygems.org/gems/csql
http://harelba.github.io/q/ja/index.html
https://github.com/harelba/q/
更新
4/5 SELECTで「*」を利用した際に、日本語のカラムが設定できないバグを修正