TreasureDataの2015年を新機能で振り返る


普段トレジャーデータでサポートしてる@nora96oです。
今回は、[Treasure Data Advent Calendar 2015](http://qiita.com/advent-calendar/2015/td)の10日目の記事です。
去年は、[TreasureDataの1年半を機能面で振り返る](https://oss.sios.com/bigdata-blog/m0srz1)という記事を12月に書いたので、今年も2015年を振り返ってみます。

# Streaming Import
## Fluent Bit
[Fluentd Bit](http://fluentbit.io/)という組み込みLinux向けにC言語で書き直された軽量のFluentdをリリースしました。
MQTTやXbee Input Pluginを持っていてIoT向けのFluentdといったところです。
![fluentbit](http://fluentbit.io/assets/images/fluentbit_flow.png)

ちなみにMailing ListやSlackなどもあって、興味があれば参加してみていただけると嬉しいです。
メインメンテナのEduardoが喜びます。

- Slack: http://slack.fluentd.org
- Mailing list: https://groups.google.com/forum/#!forum/fluent-bit
- Github: http://github.com/fluent/fluent-bit
- IRC: irc.freenode.net #fluentbit
- Twitter: @fluentbit

## td-agent
みなさんのtd-agentのバージョンは2系になっていますか？
td-agent1系をまだご利用の方がいれば、td-agent2にアップグレードしていただければなと思います。

参考:

- [fluentd - Treasure Agent(td-agent)の1と2の今後 - Qiita](http://qiita.com/repeatedly/items/c8107bc8ba5ba01133f8)
- https://docs.treasuredata.com/articles/td-and-td-agent-deprecation-201510



Fluentd本体については、[Fluentd update 2015](http://qiita.com/repeatedly/items/6e8f67006b7422837867)でもチェックしてみてください。

# SDKs
## Tokyo RegionのSDK Backend Serverの設置
SDK経由のインポートのレイテンシ改善のために、日本のRegionにもBackend Serverを設置しました。

参考:

* [JavaScript/iOS/Android SDKバックエンドインスタンスに日本リージョンが追加，劇的な低レイテンシを実現](http://blog-jp.treasuredata.com/entry/2015/11/06/195955)

## Android SDK
Android SDK v0.1.8をリリースしています。
ここでの大きな違いとしては下回りのライブラリを変更し、不要なメソッドを除去しています。
これにより、Androidの65kメソッドまでしか登録できない制限に対応しています。
ちなみに、メソッドの数を9700から3000まで削減しています。

参考:

- https://github.com/treasure-data/td-android-sdk/blob/master/ChangeLog

## iOS SDK
iOS SDK v0.1.8をリリースしています。
特別大きな変更をしているわけではありませんが、アップロードのRetryのハンドリング改善などを実施しています。

参考:

- https://github.com/treasure-data/td-ios-sdk/blob/master/ChangeLog

## Javascript SDK
Javascript SDK v1.5.1をリリースしています。
ちなみにv1.4.0からリクエストの方式がCORSからJSONPになっています。
ページ遷移が非常に高速な場合に、リクエストがきちんと行われる前にページ遷移してしまい、データの取りこぼしがあるという問題がありました。
しかし、この変更により従来よりもリクエストに必要な時間を半分にすることができ、ページ移動が高速に行われた場合などの取りこぼしを低減できるかとおもいます。

参考:

- https://github.com/treasure-data/td-js-sdk/blob/master/CHANGELOG.md

## 3rd Party Analytics Serviceとの連携
今年は、Callback URLがあるような3rd PartyのAnalytics Serviceとの連携も進めてきました。
これにより3rd partyのサービスのSDKを入れるだけで、TreasureDataにもサービスでデータ転送が行われるようになります
また、シンプルな分析は、3rd paraty側、ローデータを使ったより詳しい分析や他のデータソースと組み合わせた分析をするならTreasureData。という住み分けが出来るようになったかなと思います。

### Segment
Segmentは、いろんなサービスにデータを経由してくれるサービスです。
SegmentのSDKを入れておくだけで、TreasureDataやGoogle Analyticsなどなど他のサービスとの連携を可能にします。

参考:

* https://docs.treasuredata.com/articles/segment

### adjust

adjustは、リアルタイムに売上、イベント数、セッション数、インストール数、クリック数といった定量データに加え、コホート分析に基づいて、広告がどのような効果を可視化するためのサービスで、コールバックURLをつかってTreasureDataにもデータが送れるようになりました。

参考:

* [adjustとTreasureDataを連携させてみる！](http://qiita.com/toru-takahashi/items/5b870d3615348ce020b3)
* https://docs.adjust.com/en/special-partners/treasure-data/

# Batch Import

Batch Importとして、これまでTreasureDataでは、`td`コマンドに付属した`td import`コマンドを提供しておりました。
しかし、バッチ処理の複雑さ・大変さに対応できるようなアーキテクチャになっていなかったため、Embulkというバッチ処理フレームワークをOSSとして公開しました。
今後、バッチ処理のデータインポートのデファクトスタンダードになっていけるようにサポートしていきたいと思うところです。

## Embulk

EmbulkをまさにOSSとして公開しました。
[Embulk Advent Calendar 2015](http://qiita.com/advent-calendar/2015/embulk)があるので、こちらでいろんな機能について知ることができるかと思います。

参考: 

* https://github.com/embulk/embulk
* http://www.embulk.org/docs/
* [Embulkを使ってS3上のELBのログをTreasureDataにインポート](http://qiita.com/toru-takahashi/items/41e678fd2c60f2d68497)

ちなみにEmbulkを利用して、TreasureDataにデータをインポートするには、[embulk-output-td](https://github.com/treasure-data/embulk-output-td)をご利用ください。

## DataConnector
サーバサイドでクライアントレスなデータインポートするとして、DataConnectorをリリースしました。
DataConnectorのコアは、Embulkとなっており、データソースから取ってくるためのPlugin自体はOSSとして公開されているものばかりです。
TreasureDataがDataConnectorを改善していけばいくほど、Embulkにもそれがそのまま適用されていくという構造になっており、OSSと共にビジネスも進めていくことができるのかなとおもいます。
まだ、WebConsoleからのジョブ登録などはできないため、tdコマンドをインストールして利用する必要があります。
データのインポート先もこれからどんどん増えて行きますので、ご注目ください。

* [Data Connector for Amazon S3](https://docs.treasuredata.com/articles/data-connector-amazon-s3)
* [Data Connector for Amazon Redshift](https://docs.treasuredata.com/articles/data-connector-amazon-redshift)
* [Data Connector for Google Cloud Storage](https://docs.treasuredata.com/articles/data-connector-google-cloud-storage)
* [Data Connector for Riak CS](https://docs.treasuredata.com/articles/data-connector-riak-cs)
* [Data Connector for FTP](https://docs.treasuredata.com/articles/data-connector-ftp)
* [Data Connector for MySQL](https://docs.treasuredata.com/articles/data-connector-mysql)
* [Data Connector for PostgreSQL](https://docs.treasuredata.com/articles/data-connector-postgresql)
* [Data Connector for Mixpanel](https://docs.treasuredata.com/articles/data-connector-mixpanel)
* [Data Connector for SalesForce](https://docs.treasuredata.com/articles/data-connector-salesforce)
* [Data Connector for Marketo](https://docs.treasuredata.com/articles/data-connector-marketo)
* [Data Connector for JIRA](https://docs.treasuredata.com/articles/data-connector-jira)

ちなみに、自分のバッチ処理フレームワークにインポートツールを組み込みたい場合には、ユースケースにもよりますが、DataConnectorではなく、Embulkの利用も良いでしょう。

また、DataConnectorではLocal Executor Pluginでデータのインポート処理を現在は行っています。
しかし、そのうちMapReduce Executor Pluginによって、TreasureDataのHadoop環境でデータのインポートを行うことができるようになります。

# Web Console

Web Consoleでは内部的な改善として、Rails3からRails4になったり、次のConsole v3を目指した準備が着々と進められています。

## Account IP Whitelist

機能追加としては、ユーザ単位のIP WhiteListはありましたが、アカウント全体に対してのIP WhiteListが追加されました。


# Query Engine
## Hive
### Hadoop2への移行

[Treasure Data Update 2015 - Hadoop](http://qiita.com/ryu_kobayashi/items/25c557b65b73778eabfe)
でも紹介している通り、Hadoop1(CDH4)からHadoop2(HDP2)への移行が行われました。（ついに・・・
これにより、Hive0.10からHive0.13にアップグレードしています。
主な変更点は[Hive 0.13 Major ChangeLog](https://docs.treasuredata.com/articles/hadoop-upgrade-201506#major-changelog)を参照ください。

### Hivemallの導入
Hiveで機械学習ができるライブラリのHivemallを導入しました。
これで、オフラインの機械学習をTreasureData上で実施するなどの仕組みが行えるようになりました。

また、それだけでなく、Hivemallのライブラリで利用できる関数も使うことができ、機械学習をしなくても便利なことが色々できるようになりました。

例えば、`normalize_unicode`や`each_top_k`関数があります。
ここらへんについてもどこかで紹介できればなと思います。

参考:

- https://docs.treasuredata.com/articles/udfs#hivemall
- https://github.com/myui/hivemall

### Hive New UDFs

TreasureData独自関数もHivemall以外でも増えました。

* [TD_DIVIDE](https://docs.treasuredata.com/articles/udfs#tddivide)
	* 0で除算したときにエラーにならずに、0を返却する関数
* [TD_SUBSTRING_INENCODING](https://docs.treasuredata.com/articles/udfs#tdsubstringinencoding)
	* BYTE数で文字列する関数
* [TD_LAT_LONG_TO_COUNTRY](https://docs.treasuredata.com/articles/udfs#tdlatlongtocountry)
	* 緯度経度情報から国名算出関数
* [TD_SUMIF/TD_AVGIF](https://docs.treasuredata.com/articles/udfs#tdsumif)
	* 条件付きでSUM/AVGする関数

## Presto

### Presto本体のアップデート

現在のTreasureDataのPrestoのバージョンは、0.128(記事投稿時のPresto最新)となっております。去年自体で0.88だったので、だいぶアップデートを行いました。

これに伴って機能追加自体も大きくありました。

詳しくはこちら・・・https://prestodb.io/docs/current/release.html
別な機会にまとめます・・・

大枠は[Treasure Data Update 2015 - Presto](http://qiita.com/xerial/items/a9093b60062f2c613fda)を参照ください！

### Presto New UDFs

TreasureDataで新規に追加UDFもあります。

* [TD_PARSE_USER_AGENT](https://docs.treasuredata.com/articles/releasenote-20150601#presto-tdparseuseragent-udf)
	* User Agentをパースする関数
* [TD_CURRENCY_CONV](https://docs.treasuredata.com/articles/releasenote-20150501#presto-tdcurrencyconv)
	* 為替レートの変換する関数
* [TD_IP_TO_COUNTRY_CODE](https://docs.treasuredata.com/articles/presto-udfs#tdiptocountrycode)
	* IPアドレスから国コード表示
* [TD_IP_TO_COUNTRY_NAME](https://docs.treasuredata.com/articles/presto-udfs#tdiptocountryname)
 	* IPアドレスから国名表示


# Result Output

外部への書き出し機能も続々と追加されてきています。
GoogleやAWSの各種サービスとの連携も増え、TreasureDataと他のサービスとでのポジションの違いなんかをより明確にする準備が整ってきているように思います。

* [Job Result Output to Google BigQuery](https://docs.treasuredata.com/articles/result-into-google-bigquery)
* [Job Result Output to Google Cloud Storage](https://docs.treasuredata.com/articles/result-into-google-cloud-storage)
* [Result output to nex8](https://docs.treasuredata.com/articles/result-into-nex8)
* [Result Output to MongoDB](https://docs.treasuredata.com/articles/result-into-mongodb)
* [Result Output to Google SpreadsheetのGoogleのOAuth方式への対応](https://docs.treasuredata.com/articles/releasenote-20150501#backend-oauth-based-authentication-for-google-spreadsheet-result-output)


# Other tools

## re:dash
手前味噌ですが、re:dash pluginを作ってみました。
クエリを登録していろんなデータソースからデータを取得して可視化できるダッシュボードにできるオープンソースのダッシュボードツールです。

参考:

- [re:dashからTreasureDataにHive/Prestoクエリを直接投げる。](http://qiita.com/toru-takahashi/items/9f1f425a1474d1f2c6da)

## Luigi
Pythonによるワークフロー管理ツールのためのプラグインluigi-tdもリリースしました。
しかし、luigi-tdの代わりにtd-client-pythonを使っても良いですが、今年はワークフロー管理という言葉が徐々にWeb業界に広まってきたのではないかなと思います。今年最後に[Workflow Hacks! #1](http://eventdots.jp/event/574963)というイベントもやるので興味があれば、ぜひ参加ください。

参考:

- [Luigi によるワークフロー管理](http://qiita.com/k24d/items/fb9bed08423e6249d376)

## Jupyter + Pandas

Pythonのライブラリとして人気があるPandasと、WebブラウザでインタラクティブにPythonを実行できるJupyterを利用して、TreasureDataとインタラクティブにSQLを実行して集計・可視化を行うこともできるようになりました。

参考:

- [pandas-td](https://github.com/treasure-data/pandas-td)
- [TreasureDataとPandasとJupyterでインタラクティブにデータを可視化する。](http://qiita.com/toru-takahashi/items/7c4320df5b77e4b6e2a5)
- [
Interactive Analysis with Jupyter + Pandas + TD
](https://docs.treasuredata.com/articles/jupyter-pandas)

## Looker
LookerのOEM提供を始めました。
Lookerは、最近西海岸あたりではやりらしいBIツールです。
LookMLというマークアップ言語をつかって、データソースの設定やダッシュボードを作成することができます。
Tableauのようにアドホックに分析するというよりは、昔ながらの事前定義をして帳票を作ったりダッシュボードを作ったりというためのBIの進化系です。

![looker](https://i.gyazo.com/6d93f3b6af2dc90e330f67dd73e97dec.png)

参考:

- http://www.looker.com/
- https://docs.treasuredata.com/articles/looker

## DataTank
DataTankというデータマートのオプション提供を開始しました。
PostgreSQLをベースとしたRDBをトレジャーデータ側でホスティングする仕組みになっています。
BIツールとの接続性やシームレスな操作を考えると、既存のRDBを使うのがベストです。
また、それに加えてFDW(Foreign Data Wrapper)やcstoreなどの機能も合わせて備えています。これにより、TreasureData上のデータとDataTank上のデータをJoinするといったことも可能です。

参考:

- [Announcing Data Tanks: Faster Reporting and Unlimited Connectivity](http://blog.treasuredata.com/blog/2015/10/26/data-tanks/)
- https://docs.treasuredata.com/articles/data-tank
- [Treasure Dataの新機能(Data Tank)をAudienceOneのレポート機能で利用した話 ](http://yebisupress.dac.co.jp/2015/11/06/datatank_aone/)

## td2slack

あまりアピールはしていなかったのですが、ユーザさんがいたので、紹介です。
TreasureDataのクエリ実行結果をSlackにPushするための中継サーバです。

参考:

- https://github.com/treasure-data/td2slack
- [Mackerel、Treasure Data、Slackを組み合わせて障害検知の初動をサポートする](http://qiita.com/kenchan@github/items/f1e3132d746c88967b2c)

# その他
## ロゴ
今年もまたロゴが変わりました。[下町ロケットの帝国重工](https://i.gyazo.com/9b879e9075562cb92c86ea8156c545e0.png)と被らなくてよかったです。
![logo](https://i.gyazo.com/4124b1c4331ce5a42c1ce5882a8e4728.png)

## サポートツール
Desk.comとOlarkをつかっていたんですが、ZendeskとZopimに移行しました。
ZendeskとZopimが以前よりもUIが良くて好評なようで良かったです。

### Desk.com Portal

![zendesk](https://i.gyazo.com/0e12b04d47a81f5ddfc3d80a014a7dd3.png)

### Olark

![olark](https://i.gyazo.com/43b8ddae8fe5278aa5ecc767275772fd.png)

### Zendesk Portal

![Zendesk](https://i.gyazo.com/6d89cafb8ea0d796f6f84ede3320f321.png)

### Zopim

![Zopim](https://i.gyazo.com/0360f7b009a2fbc68503f38ce1f1aec0.png)

## フィードバックポータル
UserVoiceというサービスを使って、機能要望ポータルを開始しました。
こういう機能があったらいいなーというのをどしどしフィードバック下さい。
http://treasuredata.uservoice.com/forums/313566-general

![uservoice](https://i.gyazo.com/45f09c37ea5609229598e56cf222bd7c.png)

# まとめ
トレジャーデータで2015年にリリースされた新機能を中心に紹介してみました。
書き忘れているところもあるかもしれませんし、ここに書いている以外にも内部的な様々な改善や安定性を向上させるためのテストやリリース改善など、目に見えない数多くの取り組みを行っています。
来年はもっとトレジャーデータの魅力をたくさんの人に届けられるようにな活動をもっとしていきたいなあと思うところです。

トレジャーデータをご利用中に困ったことがあれば、お気軽にサポートチャットやサポートセンタまでお問い合わせください！