Treasure Dataのデータインポート方法一覧


Treasure Data，昔はTreasure Agent(Fluentd)を中心としたデータインポートがメインでしたが，今では他の方法も増え，より簡単にデータをインポートできるようになっています．この記事ではそれらの概要を一通り眺められるようにしたいと思います．
現状データインポートには大まかに以下の方法があります．

- Treasure Agentによるインポート
- TDロガーによるインポート
- JavaScript SDKによるインポート
- モバイル SDKによるインポート
- Web Consoleからのファイルアップロードによるインポート
- tdコマンドを使ったインポート

以下，それぞれを簡単に見ていきたいと思います．

# Treasure Agentによるインポート

広く使われているFluentdベースでのインポートです．fluent-plugin-tdを使いTreasure Dataへとデータを上げます．fluent-plugin-tdについては以前書いた[fluent-plugin-tdの説明](http://qiita.com/repeatedly/items/df4a3623a78f3e063a34)を参照してください．

![td_agent_image.png](https://qiita-image-store.s3.amazonaws.com/0/566/967f194a-4922-c460-d645-e47866a81308.png "td_agent_image.png")


Treasure Agentを利用することによって，apacheなどの既存サーバのログ，アプリケーションのログ，システムのステータス，外部サービスのデータなどを統一的に集め，ストリーミング的にロバストにTreasure Dataにインポートすることが出来ます．大量のデータを扱う場合のデファクトになります．

Fluentdのエコシステムがそのまま使えるのが良いところです．

# TDロガーによるインポート

現在はRubyとJavaで利用可能な方法で，[td-logger-ruby](https://github.com/treasure-data/td-logger-ruby)/[td-logger-java](https://github.com/treasure-data/td-logger-java)を使って，Treasure Agentなどを使わずに直接Treasure Dataにデータを上げることが出来ます．以下はRubyの例です．

```rb
require 'td-logger'
TreasureData::Logger.open('production', :apikey => "YOUR_API_KEY" :auto_create_table => true)
TD.event.post('app', 'foo' => 'bar') # production.appに{'foo':'bar'}が入る
```

Rubyの場合，Railsを使っているのであれば，`config/treasure_data.yml`に設定を用意することで自動でセットアップすることも可能です([参考](https://github.com/treasure-data/td-logger-ruby#direct-upload))．

注意点として，ロガーにバッファが実装されているとはいえ，Fluentdほどのリッチな機能があるわけではありません．アプリケーション単体からお手軽にデータを上げる方法ではありますが，特別な理由がない限りTreasure Agent経由からのインポートを使うことになるでしょう．TDロガーからTreasure Agentには，設定を変更するだけで簡単にデータを飛ばせます(READMEに設定が書いてあります)．Treasure Dataとしても，そちらを推奨しています．

# JavaScript SDKによるインポート

Webページ上でのアクションイベントなどを，JavaScriptのコードを挟むだけで簡単にTreasure Dataに送ることが出来ます．[Treasure Data JavaScript SDKの使い方](http://qiita.com/kzk9/items/15f4e01cafa30fb8e7a5)という記事に使い方や取得出来る情報などが書かれているため参考にしてみてください．

JavaScript SDKを使えば生ログを直接使ってGoogle AnalyticsやMixPanelのような解析を行うことが出来ます．また，Treasure Agentなどを併用することで，アプリケーションやモバイルなどのログと組み合わせて，直接横断的な解析も出来るようになります．

3rd partyになりますが，[TreasureData JS SDKを使ってTDに情報をおくるRack Middlewareを書いた。](http://hisaichi5518.hatenablog.jp/entry/2014/12/01/191924)で紹介されている[rack-td_js_sdk](https://github.com/hisaichi5518/rack-td_js_sdk)を使うことで，RubyのRackアプリであれば簡単にJavaScript SDKが利用出来るようになります．

# モバイル SDKによるインポート

最近ではモバイルの利用が増えており，そこでユーザがどのような行動をしたかも，サービス改善には重要なデータになっています．現在Treasure Dataでは，iOS，Android，Unity向けのSDKを提供しています．
これらの詳細に関しては，Advent Calendarの22日に紹介される予定です．

iOS SDKに関しては，[TreasureData + iOS SDK](http://qiita.com/akito1986/items/6794b75c3b3825cf2c7e)の記事でObjective-CとSwiftでの例が見られます．そのほか，英語になりますが以下にそれぞれ説明があります．

- [Treasure Data Android SDK](http://docs.treasure-data.com/articles/android-sdk)
- [Treasure Data iOS SDK](http://docs.treasure-data.com/articles/ios-sdk)
- [Treasure Data Unity SDK](http://docs.treasure-data.com/articles/unity-sdk)

最近だとCookpadがPureeというモバイル向けのロギングライブラリを公開([アナウンス記事](http://techlife.cookpad.com/entry/2014/11/25/132008))するなど，今後も需要は増えると思います．

# Web Consoleからのインポート

Treasure DataのWebコンソールを使って，ファイルをアップロードします．以下のURLにアクセスしてください．

https://console.treasuredata.com/import/file

Webブラウザ経由なので，数GBなどのファイルを扱えるわけではありませんが，小さめのCSVやTSVファイルであれば，簡単にインポートすることが可能です．[（アップデート）ファイルのアップロード機能が改善されました。](http://treasure-data.hateblo.jp/entry/2014/07/18/133053)にスクリーンショットつきで説明があるので，参考にしてみてください．

# tdコマンドを使ったインポート

td-toolbeltやtdのgemをインストールした場合に使える方法です．ワンタイム・インポートとバルク・インポートの二つの方法が用意されています．

* ワンタイム・インポート

`td table:import`コマンドを使ってインポートします．後述するバルク・インポートと違い，大量のデータのインポートには向きませんが，手元のjsonデータなどを簡単にインポートできます．以下はjsonの例ですが，他にもapacheなどもフォーマットに指定出来ます．

```sh
$ td table:import db table --format json --time-key time logs.json
```

* バルク・インポート

`td import`コマンドを使ってインポートします．インポート用の処理群を一つのセッションとしてまとめ，ステップを分けて実行することで，確実にまた効率よくデータをアップロード出来ます．
それぞれのコマンドの説明は長くなるので，以下の記事を参考にしてみてください．`import:auto`を使えば，各ステップをまとめて一コマンドで実行出来たりもします．

- [Treasure Dataに大量にデータをアップロードする td import 機能](http://yoshidashingo.hatenablog.com/entry/2014/04/14/225418)
- [実データで覚える Treasure Client コマンドラインリファンス 〜1.Data Import〜](http://treasure-data.hateblo.jp/entry/2014/01/22/000000)の"Bulk Import"のセクション

また，現在Treasure Dataではこのバルク・ロードツールとは別の，プラガブルで様々な用途に使えるバルク・ロードツールを開発中で，それもOSSとしてリリースする予定です．もう少しお待ちください．

# まとめ

Treasure DataのストレージはSchema on Readなため，インポート時にスキーマを要求しません．そのため，簡単にデータソースを増やすことができます(インポート時にスキーマ必須なデータストアの場合，設定やコードの修正が必要になることが多い)．

そのため，上記の様々な方法を使って「まず貯める．そして，クエリを投げて傾向を見てみる」ということが簡単にできるようになっています．ログの設計はもちろん大事ですが，いきなり上手く設計出来るかというと難しいので，取れそうなデータはとりあえずどんどん貯めて，そこから試行錯誤して洗練させていく，というのが手軽に出来るのもTreasure Dataの良いところです．その後Scheduled QueryやBIツールとかと連携させて，レポーティング，可視化，機械学習などを使ってより自社にあったデータ解析の仕組みを作りこんで行くことが出来ます．

この記事ではインポートにフォーカスしましたが，他の機能も常に改善されており，どんどん使いやすくなっています．それらもこのAdvent Calendar，もしくは公式ブログなどで順次紹介出来ればと思っています．