google bigqueryを使ってみた!
DESCRIPTION
PerlCasual #06 2014/10/24 Yusuke Wada a.k.a. yusukebeTRANSCRIPT
Google BigQueryを つかってみた!
PerlCasual#06 2014/10/24
Yusuke Wada a.k.a. yusukebe
2つの問題意識
1. 開発サイドから• 例えばアクセスログが膨らんで活用できない
1.サイズが大きい
2.分散されている
3.量が多いので解析するのが難しい
• 何か困った時に過去のログが使えない...
大きなログを簡単に追いたい!
2. ビジネスサイドから• 例えば行動ログ的な細かい指標が無い
1.データベース上の静的な情報のみ
2.Google Analyticsは非常に優秀だが...
3.ユーザーに紐付く情報を解析したい
指定したログを貯めてディレクターの人
でも解析・分析でできるようにしたい!
と、その時...
巷でビッグクエリーという言葉を
聞くようになる...
とか!
Google BigQueryは巨大なデータを様々
なフォーマットで放り込めてSQLライ
クなクエリで問い合わせが可能でチョー
高速!120億レコードに対するクエリ
を5秒でフルスキャン!ステキー しか
も利用料も安いと来たもんだっ!
ってことで
Google BigQueryを使ってみた話+α
データを用意する
• RPCへのアクセス+ユーザー識別子
• 一旦JSON形式でファイルへ書き出す
• 集約サーバーに投げる
• fluent-plugin-bigquery で BigQuery へ挿入
業務で使っているログの場合
APIサーバ APIサーバ APIサーバ
集約サーバ
Google BigQuery
データを用意する
• Streaming APIの「statuses/sample」を利用
• publicなツィートのほんの一部を取得可能
• fluent-plugin-twitter で簡単に
• 最後はやはり fluent-plugin-bigquery を使う
デモのためにTwitter APIを利用する
Tweet収集サーバ
Google BigQuery
スキーマは必要
Google BigQueryは ブラウザから色々できる
例えば...• BigQuery Browser Tool (後述)
• Googleアカウントベースで権限の追加
• 利用状況の確認
• APIクライアントの作成や削除
• APIリクエストのモニタリング
• 課金の管理フルマネージドで便利!
独自のSQLで問い合わせる
https://cloud.google.com/bigquery/query-reference
ここで BigQuery Browser Tool 登場
SELECT COUNT(*) AS tweet_countFROM [twitter-stream-sample:twitter.tweet]
ちなみに10月18日(土)から収集開始
22,289,497件 / 7.5秒
Browser Toolで出来ること• Queryの実行と結果を表形式で見る
• Queryの保存とロード
• CSV形式での結果のダウンロード
• 新しいテーブルやDataSetの作成など
必要最小限の機能が揃っている
さらにBigQuery Connector for Excelを使えばExcelとの連動も可能
例えばディレクターが新しいKPIを図るためにQueryを 構築することも考えられる
以上 Google BigQuery を使ってみた話終わり
One More Thing
今作ってるモノ
• 元々業務でBigQueryの結果を可視化するため
• Browser Toolのある種拡張
• BigQueryのThird-partyサービスは複雑で高価
• 目指すところはKibanaっぽいところ?
BigView For Visualizing Google BigQuery
BigViewで出来ること• Googleアカウントでのログイン
• 権限を持つプロジェクトへのクエリの実行
• とある条件下での結果のチャート表示
• Pieチャート
• Lineチャート
• クエリの保存 (未実装)
BigViewを使ってみる
1時間ごとのツイート数をグラフにしてみる
SELECT USEC_TO_TIMESTAMP((UTC_USEC_TO_HOUR(created_at))) AS time, COUNT(*) AS tweet_countFROM [twitter-stream-sample:twitter.tweet]GROUP BY timeORDER BY time
この辺はデータが欠落してます><
ユーザーの使用言語の割合を チャートにしてみる
SELECT user_lang, COUNT(user_lang) AS lang_countFROM [twitter-stream-sample:twitter.tweet]GROUP BY user_langORDER BY lang_count DESC
何らかのライセンスで パブリックに使ってもらうかもしれません!
まとめ
• Google BigQueryはブラウザで色々できちゃって
楽だし安いそして早い/速い
• 実装(連携?)はおおよそfluentdにお任せ
• 活用できてないデータを活かすことが出来る
• Browser ToolでディレクターがSQLを書く?
• BigViewでシンプルなデータの視覚化を目指す
• Googleの回し者ではないです ^^