Skip to main content
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 へ挿入
Google BigQuery 
集約サーバ 
APIサーバAPIサーバAPIサーバ
データを用意する 
デモのためにTwitter APIを利用する 
• Streaming APIの「statuses/sample」を利用 
• publicなツィートのほんの一部を取得可能 
• fluent-plugin-twitter で簡単に 
• 最後はやはり fluent-plugin-bigquery を使う
Google BigQuery 
Tweet収集サーバ
スキーマは必要
Google BigQueryは 
ブラウザから色々できる
例えば... 
• BigQuery Browser Tool (後述) 
• Googleアカウントベースで権限の追加 
• 利用状況の確認 
• APIクライアントの作成や削除 
• APIリクエストのモニタリング 
• 課金の管理 
フルマネージドで便利!
独自のSQLで問い合わせる 
https://cloud.google.com/bigquery/query-reference
ここで BigQuery 
Browser Tool 登場
SELECT COUNT(*) AS tweet_count 
FROM [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
今作ってるモノ 
BigView 
For Visualizing Google BigQuery 
• 元々業務でBigQueryの結果を可視化するため 
• Browser Toolのある種拡張 
• BigQueryのThird-partyサービスは複雑で高価 
• 目指すところはKibanaっぽいところ?
BigViewで出来ること 
• Googleアカウントでのログイン 
• 権限を持つプロジェクトへのクエリの実行 
• とある条件下での結果のチャート表示 
• Pieチャート 
• Lineチャート 
• クエリの保存 (未実装)
BigViewを使ってみる
1時間ごとのツイート数 
をグラフにしてみる
SELECT USEC_TO_TIMESTAMP((UTC_USEC_TO_HOUR(created_at))) 
AS time, COUNT(*) AS tweet_count 
FROM [twitter-stream-sample:twitter.tweet] 
GROUP BY time 
ORDER BY time
この辺はデータが欠落してます><
ユーザーの使用言語の割合を 
チャートにしてみる
SELECT user_lang, COUNT(user_lang) AS lang_count 
FROM [twitter-stream-sample:twitter.tweet] 
GROUP BY user_lang 
ORDER BY lang_count DESC
何らかのライセンスで 
パブリックに使ってもらう 
かもしれません!
まとめ
• Google BigQueryはブラウザで色々できちゃって 
楽だし安いそして早い/速い 
• 実装(連携?)はおおよそfluentdにお任せ 
• 活用できてないデータを活かすことが出来る 
• Browser ToolでディレクターがSQLを書く? 
• BigViewでシンプルなデータの視覚化を目指す 
• Googleの回し者ではないです ^^