LoginSignup
9
3

More than 5 years have passed since last update.

CSVファイルをSQLで操作できるgem「CSQL」を作りました

Last updated at Posted at 2018-04-01

はじめに

最近アルバイトで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を以下のように定義します。

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で「*」を利用した際に、日本語のカラムが設定できないバグを修正

9
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
3