18
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Treasure DataAdvent Calendar 2014

Day 2

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

Last updated at Posted at 2014-12-02

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の説明を参照してください.

td_agent_image.png

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

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

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

現在はRubyとJavaで利用可能な方法で,td-logger-ruby/td-logger-javaを使って,Treasure Agentなどを使わずに直接Treasure Dataにデータを上げることが出来ます.以下はRubyの例です.

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に設定を用意することで自動でセットアップすることも可能です(参考).

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

JavaScript SDKによるインポート

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

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

3rd partyになりますが,TreasureData JS SDKを使ってTDに情報をおくるRack Middlewareを書いた。で紹介されているrack-td_js_sdkを使うことで,RubyのRackアプリであれば簡単にJavaScript SDKが利用出来るようになります.

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

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

iOS SDKに関しては,TreasureData + iOS SDKの記事でObjective-CとSwiftでの例が見られます.そのほか,英語になりますが以下にそれぞれ説明があります.

最近だとCookpadがPureeというモバイル向けのロギングライブラリを公開(アナウンス記事)するなど,今後も需要は増えると思います.

Web Consoleからのインポート

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

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

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

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

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

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

$ td table:import db table --format json --time-key time logs.json
  • バルク・インポート

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

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

まとめ

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

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

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

18
18
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
18
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?