最近流行りのプライベートDMPですが、その大半はトレジャーデータ(YBI)だったりします。
トレジャーデータはすごい便利(特にtd-js-sdk)なんですが、ちょっとお高い。
一方で、BigQueryは価格の安さとクエリの実行速度は魅力的なんですがトレジャーデータに比べるとデータの入出力が非常に不便だったりします。
なので、トレジャーデータのような使いやすさをBigQuery上で実現するアプリケーションをGAE(Python)で作ってみました。
自分のソースコードを使うのであれば開発ゼロで構築可能です。
ソースコード:https://github.com/mats116/ElasticBigQuery
※ 改修等は自由にやって頂いて大丈夫ですが、出来ればIssueやPull Request頂けると嬉しいです。
※ ちなみに完全に個人プロジェクトなんで、所属企業とはなーんの関係もないです。
※ elasticbigquery.appspot.com
は無課金で動かしているので自由に叩いて大丈夫ですが、良識の範囲内でお願いします。
出来るようになること
td-js-sdkからのログ取得
- 下記のようにエンドポイントを変更するだけでトレジャーデータと同じように動作します。
- writeKeyは今のところstaticですが、発行や権限管理を画面上から行えるようにする予定です。
- v1.4.0ぐらいからデフォルトになったJSONPのみ対応しています。
- BigQueryはスキーマレスではありませんがAPI内で自動識別し、datasetとtableの生成まで自動で行います。
- 生成されるtable名は
table_id+YYYYMMDD
のように末尾に日付(UTC)が入り、日別テーブルになるようになっています。
- 生成されるtable名は
- 独自機能として下記パラメータはURLデコードされた状態で取得されます。
- td_path
- td_referrer
- td_url
pageviews.js
<script type="text/javascript">
var td = new Treasure({
host: 'elasticbigquery.appspot.com',
pathname: '/dmp/v1/event/',
writeKey: 'thie_is_static_setting_yet',
database: '<dataset_id>'
});
td.trackPageview('<table_id>');
</script>
webビーコンからのログ取得
- 下記エンドポイントで透過GIFを返します。
//elasticbigquery.appspot.com/dmp/v1/beacon/<dataset_id>/measurement
- GETパラーメータが取得出来ます。
- リファラーなどデフォルトで取得しているパラメータがいくつかあります。
Cookie IDの発行
- GAEのドメイン
xxx-xxx.appspot.com
の配下にbqid
を発行します。- 用途に応じてドメインやid名は変更して下さい。
- 下記エンドポイントで確認可能です。
- http://elasticbigquery.appspot.com/dmp/v1/bqid/get
- GETパラメータに
callback=hoge
を付与するとJSONP的な感じで使えます。
これから出来るようにしたいこと
アカウントの制御
- Oauth(Google)でサインアップしたアカウントにBigQueryのdatasetに対する権限をUI上から付与できるようにしたい。
writeKeyの制御
- UI上からwriteKeyを発行出来るようにしたい。(現状はstatic)
- 都度、Cloud Datastoreを参照すると辛いので多分memocache?
エクスポート機能
- クエリ結果をS3やGoogle Cloud Storageへのエクスポート出来るようにしたい。
- Apps Scriptとなんかいい感じに統合できないかな
所感
- 完全にtd-js-sdkにフリーライドしてます。。
- BigQueryへの投入に失敗したさいに、Taskqueueに積んだりしているので結構固くは作ってます。
- 個人プロジェクトなんで、GAEの負荷検証とかやってくれる会社を募集中です。
- UI作るの苦手なので誰か手伝って下さい。
※GAE構築方法
参考までに。GAE初めての人は頑張って。
用意するもの
- Googleアカウント(@gmailのアドレスでもOKです)
- Google App Engine SDKが入ったPC
プロジェクトの作成
-
Google Developers Consoleで新しくプロジェクトを作成します。
- App Engineの場所は us-central が日本から一番近いかと
- デフォルトで BigQuery API は有効化されているはずですが、念のため確認を
ソースコードの取得
- GitHubに公開しているので適当にクローンして下さい。
設定変更
-
app.yaml
を開いて、プロジェクト名を変更します- ソースコードでいうとここ