[Ruby on Rails]td-clientでQueryの出力先にTD上のテーブルを指定する

2014.08.25

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

Treasure DataではQueryの出力先としてTreasure Data上のテーブルを指定することができます。今回は、これをRubyにて行ってみました。
実業務を想定すると、一回のQueryではロジックやパフォーマンスなどが厳しい場合、複数回のQueryに分けて実行し、各Queryの結果をワークテーブルに書き込む場合などを想定しています。

サンプルソース

1.事前準備

以前の記事で書いたとおり、Gemfileに必要なものを記述して、td-clientをインストールします。

2.Queryの発行

Queryの発行についても、以前の記事とほぼ同じです。今回は「result_url」にて出力先のテーブルを指定します。

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', result_url='td://@/sample_db/prefectures_result')
     
    until job.finished?
      sleep 2
      job.update_progress!
    end
 
    job.update_status!
  end
end

上でも書いたように、6行目のquery発行時に「result_url」を指定しています。result_urlの書式は「td://@/データベース名/出力先テーブル名」です。ここ以外は、通常のQuery発行と変わりはありません。

まとめ

分かってしまえば簡単なのですが、result_urlの書式が分かるまでに意外と苦労しました。「url」という名前なので「http://~」なのかを思ってみたり・・・。
これを使い、ワークテーブルを使ったjobフローをRubyにて記述できそうです。

今回は試していないのですが、TD上のテーブル以外にも、AWS S3やFTPサーバなどへも直接出力できるようです。指定できる出力先とresult_urlの記述方法については、下記の参考サイトを参照してください。

参考サイト

Writing Job Results into your TD Table.
Job Result Output