[Ruby on Rails]td-clientでTreasureDataにQueryを発行する

2014.07.14

はじめに

前回に引き続き、Ruby on RailsとTreasureDataについてです。今回はTreasureDataにQueryを発行してみました。とはいっても、非常に簡単です。

サンプルソース

サンプルです。手順としては、

  • Gemfileにて必要なgemをインストール
  • TreasureData::Clientのquery()メソッドにてQueryを定義
  • jobの終了を待機


となります。

1.Gemfile

前回と同じですが、以下をGemfileに記述し、$ bundle install します。

gem 'td'
gem 'td-client'
gem 'msgpack'

2.Queryの発行

Queryの発行についてです。発行というよりは、QueryをjobとしてTreasureDataに登録し、処理が終了するのを待機して結果を受け取る、という感じとなります。

require 'csv'
require 'zlib'

class Sample
  TD_API_KEY = 'your api key'

  def self.index
    cln = TreasureData::Client.new(TD_API_KEY, {ssl: true})
    job = cln.query('sample_db', 'SELECT zipcode, time FROM prefectures where zipcode = 600031')
    
    until job.finished?
      sleep 2
      job.update_progress!
    end

    job.update_status!
    puts job.result.to_json

    true
  end
end

5行目のキーは、前回と同じです。8行目でTreasureData::Clientのインスタンスを作成していますが、今回はオプションでSSLを使うよう指定しています。そして9行目でQueryを定義しています。このquery()メソッドの構文は以下の通りです。

query(データベース名, 処理するQuery)

11~16行目でjobの終了の待機、スタータスの更新を行い、17行目で取得結果をjson形式で出力しています。

まとめ

jobを意識する必要があることが、TreasureDataにQueryを発行する際の注意点となるかと思います。

参考サイト

Using Ruby Bindings for REST API