Treasure Dataの新機能(Data Tank)をAudienceOneのレポート機能で利用した話


Data Tankとは?

Treasure Dataの新機能でTreasure Dataのプラットフォーム上に構築されたデータマートです。
Tableau等のBIツールとの接続を想定されており、AWSでいうところのRedshift的なものだと考えるとわかりやすいかと。
Data TankはPostgresql9.4をベースに拡張にされており、ストアドや9.1から追加されたForeign Data Wrapperも利用可能になっています。

AudienceOneについて

AudienceOneは、いわゆるDMP(Data Management Platform)で、どちらかというと、Public DMPに分類されています。
基本的な機能としては、Webデータの収集や分析、セグメンテーション、外部データ(3rdPartyデータ)との掛け合わせ分析、また、セグメンテーションしたデータをDSPなどの配信システムと連携する、といった機能を備えています。
詳しくはこちらを御覧ください

Data Tankの利用について

AudienceOneでは10/8のアップデートで複数のセグメントの重複率の分析を行うレポートでData Tankを活用しました。
最初に実際のレポートUIを見たほうがわかりやすいと思うので説明すると、
以下のようにベン図を用いて任意のセグメントについての重複率や重複ユーザ数の分析を行うことができます。
データについては大きいものでも数秒で出力することができます。

aone_report_1008

このレポートに使用しているデータは実に単純で、各セグメントA,B,Cに対して集合演算(A∩B、A∩C、B∩C、A∩B∩C)を行っているだけです。

ロジック自体はとても単純なんですが、AudienceOneには全体で4億以上のCookieデータがあり、10万を超えるセグメントがあります。
ユーザ x セグメントで直近1ヶ月を対象にすると、約120億レコードにもなります。
なので、事前にすべて組み合わせの集計をやろうと思ってもなかなか大変です。というより無理でした。。
とはいえ、非同期でやってしまうとスピーディーな分析ができず、PDCAサイクルを高速でまわすことができなくなってしまいます。

アドホックにセグメント間の重複分析できるようにするためにData Tankを利用しました。

システム構成としてはざっくりですが、以下のようになっており、Treasure Data上にあるログデータやAudienceOneで推計しているデモグラフィックデータなどをまとめてHiveQLで中間集計を行い、その結果をData Tankに出力しています。
そしてAudienceOneのコンソールから直接Data Tankに接続してデータを取得しています。

aone_datatank

データ量としては、HiveQLで処理するデータが上記で書いた通り約120億レコードで中間集計を行った結果が1,000万弱のレコード数となっています。
HiveQLの実行からData Tankに入れるまでの処理時間はだいたい1~2時間くらいです。

中間テーブルのデータの持ち方が一番工夫したポイントなので、具体的なテーブルの構成についてはご紹介できませんが、当初はRedshiftでの構築を検討していました。
ところが、ご存知のとおりRedshiftでは使える関数が限られており事前に考えた方法での実現が難しく、ちょうど困っていたところでData Tankを紹介いただいて、今回採用に至りました。

パフォーマンスについては、Data Tankの採用を決める前にちょっとだけやってみましたが、Redshiftと同等、ないしはData Tankのほうが早かったです。
もちろん、データ量やデータの内容、クエリによって全然異なると思いますが。
今回の採用した一番のポイントはPostgresqlの関数がすべて使える、という点だったのでまだちゃんと検証できていないというのが本音です。
個人的にはData Tankを利用することでTreasure Dataのプラットフォームですべて完結できるってのもいいなと思いました。

今後について

現状、Treasure Data+Redshift+Tableauという構成で構築しているものもあるので、
Treasure Data+Data Tank+Tableauとの比較検証もしてみたいと思います。
また、今後も継続してAudienceOneのレポート機能を拡充していくので、うまく活用したいと思っています。
Foreign Data Wrapperも今回利用しなかったので、マスタデータとの突合など機会があれば利用したいと思います。

おまけ

弊社ではエンジニアの募集もしておりますが、学生エンジニアインターンの募集もはじめました。
興味ある方がいればぜひ!
ネット広告業界のプロを目指したい、学生エンジニアインターンWanted!


DACエンジニア採用情報

  関連記事

最強のSQLクライアント(GUIツール)「TeamSQL」を使ってみた!

はじめに みなさんこんにちは、プロダクト開発本部の亀梨です。 普段はXmediaOneというメディアプランニング・広告運用管理・トラッキング・マーケティング分析を行う 統合プラットフォームの開発を担当しています。 エンジニアの皆さん、SQLクライアント(GUIツール)って何使ってます? わたくしはこ …

アドテク問題(広告表示編)

アドテクエンジニア向けの問題を考えました。 お題は「広告表示」です。 以下お題に沿った「アドタグ」を作成し、広告を表示してみてください。 全部で9問あるので、興味のある人はやってみてください。 難易度は、ちょうどいいくらいです。 全部できた人は、採用担当までご連絡ください。 Q1.バナー広告を表示し …

GoogleスプレッドシートからTreasureDataへデータを取り込む

AudienceOneの開発を担当しています。skryoです。 またまたTreasureDataネタですが、今回はGoogleスプレッドシートからGoogleAppsScriptを使ってTreasureDataへデータを取り込む手順を紹介したいと思います。 なぜ? Googleスプレッドシート上でマ …

【クラウド初心者向け】Google Cloud Platform(GCP)でWebサイトを公開してみよう!

はじめに みなさんこんにちは、プロダクト開発本部の亀梨です。 普段はXmediaOneというメディアプランニング・広告運用管理・トラッキング・マーケティング分析を行う 統合プラットフォームの開発を担当しています。 背景 わたくしは最近プライベートで開発したWebサービスをインターネット上に公開しまし …

ES5とES6でアドタグを作ってみた

はじめに アドテク問題(広告表示編)のQ7を元にネイティブ広告を表示するアドタグをES5とES6で作ってみました。 処理の流れ 大きな処理の流れは以下の通り 広告要素取得処理 サーバからタイトル/説明文/画像URLの取得を行う フォーマット処理 取得した要素を表示するページに最適化した形にフォーマッ …

オトナの常識、消費者プライバシー保護(後編)

プライバシーが保護されていると期待できなくなってしまった国とは? 『オトナの常識、消費者プライバシー保護(前編)』はこちらから            

Treasure Dataで大規模なマスタデータを扱う際にはtimeカラムインデックスを活用しよう

DACではTreasure Dataを利用して各種データの蓄積や集計を行っています。Treasure Dataは時系列のデータを扱うのに特にすぐれたアーキテクチャなのですが、セグメントIDとユーザーIDの組み合わせといった大量のマスタデータを利用した計算にも利用することもできます。そのような場合にt …

Tableau 9.2で郵便番号の特性を地図で可視化してみる

Tableau 9.2から郵便番号地図が表示可能に 弊社ではデータ分析ツールのTableauを利用しています。オーディエンスデータの重複を分析したり、デモグラフィック属性を表示したりするなどデータの可視化に役立ちますTableauでは9.2から日本の郵便番号を用いて地図を可視化できるようになりました …

【Hivemall入門】RandomForestで毒キノコ推定モデルを作る

こんにちは。俺やで。 今回も前回から間が空いてしましたが、ビッグデータに対応したHiveで使える機械学習ライブラリ、 Hivemallの使い方について、書かせていただければと思います。 なお今回はQiitaのTreasure Data / Advent Calender 2015の12/3日分として …

「Ad Tech Power Game」

こんにちは、テクノロジー戦略部の田畑です。 はじめに。 この「アドテクゑびす界」ですが、DAC公式のエンジニアブログです。他の方も色々と技術的なことを書いていますが僕エンジニアでもなんでもありません。コード書けませんし、読めません。 ではなぜそんなやつがここでブログを書いているのか?会社の公式ブログ …