Segment から TreasureData への データ転送

Semgentのデータ連携先としてTreasure Dataが選択可能になったので、そのやり方と動作を確認しみたいと思います。

* リリースノート [Treasure Data Integration](https://segment.com/docs/integrations/treasure-data/?mkt_tok=3RkMMJWWfF9wsRoluK3MZKXonjHpfsX57e0vXq62lMI%2F0ER3fOvrPUfGjI4DSstgI%2BSLDwEYGJlv6SgFTbHBMbhp0LgJWxM%3D)

#Segmentとは
Segmentはデータハブを提供するクラウドサービス。Webサイトやモバイルアプリからユーザ行動データをSegemntに転送すると、Segment側はさまざまなデータ格納先に適切な形でデータを転送してくれる。連携先は[ここ](https://segment.com/integrations)にリストされているが、かなり豊富。

Segmentのデータハブは下記URLをみるとイメージしやすい。

* [Segment Overview](https://segment.com/tour)

その他の参考URL(日本語)。

* [Y Combinator出身のスタートアップ、データ集積のSegmentが1500万ドルの資金調達に成功](http://thebridge.jp/2014/10/segment-raises-15m-for-a-customer-data-hub-pickupnews)

#Segment側の設定

1. アカウントの作成

[ここ](https://segment.com/signup)からFree trial作成することができます。

今回は個人利用なのでDeveloper planのPrivateを選択します。
![Screen Shot 2015-08-13 at 15.39.45.png](https://qiita-image-store.s3.amazonaws.com/0/89695/804c0d18-5ec8-97dd-4e33-b5b15152281e.png)

2. プロジェクトの作成 

最初にプロジェクトを作成する必要があります。
![Screen Shot 2015-08-13 at 15.41.00.png](https://qiita-image-store.s3.amazonaws.com/0/89695/58a79236-3281-dd23-bcf6-12f59d5e68b6.png)
プロジェクト名を入力。
![Screen Shot 2015-08-13 at 15.41.57.png](https://qiita-image-store.s3.amazonaws.com/0/89695/174b30da-dbc6-1068-d850-c73d359d2959.png)

3.Integration先(データ転送先)の設定
Integrationメニューを選択すると連携可能なサービスの一覧が表示されます。TreasureDataをONにします。
![Screen Shot 2015-08-13 at 15.45.33.png](https://qiita-image-store.s3.amazonaws.com/0/89695/708e5bb9-d972-5979-0dee-47784e614d11.png)

TreasureDataをONにすると、TreasureDataのAPIキーとデータ転送先のデータベースの入力を求められるので、入力します。
![Screen Shot 2015-08-13 at 15.45.14.png](https://qiita-image-store.s3.amazonaws.com/0/89695/886ab5cf-8a56-08d2-ba5c-fdfed52c7b8e.png)


#TreasureData側の設定
Segment側にてプロジェクトに指定した転送先(TreasureDataAPIキー)にデータベースを作成しておきます。テーブルは転送されてくるイベントデータ種類ごとに自動的に作成されます。
参考)[TreasureData Database and Table Management](http://docs.treasuredata.com/articles/database-and-table#management-from-command-line-interface-cli)

```
$ td db:create testdb
Database 'testdb' is created.
Use 'td table:create testdb <table_name>' to create a table.
```


#Segementへのデータ転送
Segmentは、Webサイトやモバイルアプリのデータをさまざまな方法で転送することができます。サポートしているライブラリは[こちら](https://segment.com/docs/libraries/)にリストされています。サイトやアプリからデータ転送する際に、Segmentへのアクセスキーが必要になるので、確認しておきます。

PROJECT KEYSのWRITE KEYを確認しておきます。
![Screen Shot 2015-08-16 at 13.53.53.png](https://qiita-image-store.s3.amazonaws.com/0/89695/22483dc8-c87b-17c3-a62e-4c3672e9adae.png)


今回は動作確認としてローカルのhtmlファイルにjavascriptを埋め込む方法で試してみます。
埋め込むjavascriptは下記ページに記載されいるのでコピペして、YOUR_WRITE_KEYの部分に、Segmentで確認したWRITE KEYを記載します。これを埋め込むだけで各ページのアクセス情報が取得できます。
[Segment Quickstart: Analytics.js](https://segment.com/docs/libraries/analytics.js/quickstart/)

```

<html>
<head>

<script type="text/javascript">
  !function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","group","track","ready","alias","page","once","off","on"];analytics.factory=function(t){return function(){var e=Array.prototype.slice.call(arguments);e.unshift(t);analytics.push(e);return analytics}};for(var t=0;t<analytics.methods.length;t++){var e=analytics.methods[t];analytics[e]=analytics.factory(e)}analytics.load=function(t){var e=document.createElement("script");e.type="text/javascript";e.async=!0;e.src=("https:"===document.location.protocol?"https://":"http://")+"cdn.segment.com/analytics.js/v1/"+t+"/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(e,n)};analytics.SNIPPET_VERSION="3.0.1";
  analytics.load("YOUR_WRITE_KEY");
  analytics.page()
  }}();
</script>
<title>Hello Segment and TreasureData integration!</title>
</head>
<body>
<p>Hello Segment and TreasureData integration!</p>
</body>

</html>
```

上記htmlファイルをブラウザで表示します(YOUR_WRITE_KEYを置き換える必要があります)。

![Screen Shot 2015-08-16 at 14.18.19.png](https://qiita-image-store.s3.amazonaws.com/0/89695/d468400c-68b0-f364-6243-f1cf9f710218.png)

#Segment側でのデータ確認
ProjectのDebuggerから転送されているデータを確認できます。
![Screen Shot 2015-08-16 at 14.22.41.png](https://qiita-image-store.s3.amazonaws.com/0/89695/3d0e1efe-345e-f932-39c1-b6802fcabaf6.png)

#TreasureData側でのデータ確認

TreasureDataにSegment経由でデータが転送されています！
![Screen Shot 2015-08-16 at 14.28.27.png](https://qiita-image-store.s3.amazonaws.com/0/89695/512129ec-c59e-5199-2bb7-2feb8b6e78a2.png)

今回のデータはpagesというテーブルに格納されていますね。

```
 td table:show testdb pages
Name        : testdb.pages
Type        : log
Count       : 22
Schema      : (
    timestamp:string
    received_at:string
    context:string
    message_id:string
    user_id:string
    sent_at:string
    properties:string
    anonymous_id:string
    type:string
    channel:string
    version:long
)
```


#まとめ
とりあえず簡単に動作確認をしてみましたが、ユーザデータの取り込みを統一でき、データを自分たちが利用しているデータ解析プラットフォームで活用できる、Segmentというサービスはなかなか面白いサービスだと思います。そしてもちろん、TreasureDataに取り込めば、大規模なデータをSQLで簡単に解析することができますね。