読者です 読者をやめる 読者になる 読者になる

HerokuからTreasure Dataに標準出力でデータインポートできるようになって多幸感がすごい

というわけで、実際に試してみました。
公式のページはこちら

How to ?

公式のページにある通り、Treasure Data Hadoopとheroku-td CLIプラグインをインストールした後に以下の形式で標準出力すると指定したDBのテーブルにデータが挿入されます。

@[database.table] JSON-In-ONE-LINE

データの挿入は5分毎に行われるようです。

Node.jsでやってみた

やってみました。

  • ひな形を作る。
$ express td-sample
$ cd td-sample
$ npm install
  • git initからのアプリ作成&アドオン登録
$ git init
$ git add .
$ git commit -m "initail commit"
$ heroku create
$ heroku addons:add treasure-data:nano
$ heroku plugins:install https://github.com/treasure-data/heroku-td.git
  • heroku tdでtdコマンドが使えるか確認
$ heroku td
(show usage)
  • NodeでRequest Headerを標準出力するように変更
// app.js

// ...略

var tdLogger = function() {
  return function(req, res, next) {
    var end = res.end;
    res.end = function (chunk, encoding) {
      res.end = end;
      res.end(chunk, encoding);
      var line = {
        headers: req.headers
      };
      var td = '@[' + process.env.TD_DATABASE + '.' + process.env.TD_TABLE + '] ';
      process.stdout.stream(td + JSON.stringify(line));
    };
    next();
  };
};

// app.configure の一部を変更
app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  // app.use(express.logger());
  app.use(tdLogger());
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
});

// ...略
  • package.jsonProcfileを適当に作る
# package.json
{
  "name": "application-name",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node app"
  },
  "engines": {
    "node": "0.8.x",
    "npm": "1.1.x"
  },
  "dependencies": {
    "express": "3.0.5",
    "jade": "*"
  }
}
# Procfile
web: node app.js
  • Herokuの設定を追加
$ heroku config:add TD_DATABASE=heroku
$ heroku config:add TD_TABLE=headers
  • commit & push
$ git commit -am "change for td-log test"
$ git push heroku master
$ heroku open

しばらくして以下のコマンドを実行するとTableのカウントが増えて、データが挿入されていることがわかります。

$ heroku td tables

コマンドの実行結果

これらのデータはもちろんHiveでぶん回すことができます。
素敵ですね :)