Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

BigQueryを始めてみよう - Google Analytics データを活用する

8,707 views

Published on

2015年10月5日(東京)および2015年11月27日(大阪)開催のGAP + BigQuery セミナーの資料です。

Published in: Technology
  • Login to see the comments

BigQueryを始めてみよう - Google Analytics データを活用する

  1. 1. BigQueryを始めてみよう! Google Analytics データを活用する 福田 潔 Google Cloud Platform セールスエンジニア Google for Work 部門 1
  2. 2. Google Cloud Platform BigQuery とは ● 億件レベルの大規模データセットに対する高速クエ リー ● 分析用のデータウェアハウス ○ NO DELETE/UPDATE ● SQLで操作 ● セットアップ、パフォーマンスチューニングやクラスタ 拡張といったインフラ作業不要 ● ストレージ容量無制限。自動スケールアウト 2
  3. 3. Google Cloud Platform BigQuery とは ● BIツールを使って非技術者でも操作可能 ○ Tableau, QlickView, Google Spreadsheet / Microsoft Excel ● ETL ○ クエリー結果をテーブルに出力可能 ○ JSON関数/正規表現関数 ● データ処理エンジンとの連携 ○ Hadoop, Cloud Dataflow 3
  4. 4. Google Cloud Platform BigQuery 参考構成 BigQuery ログ収集/分析基盤 Cloud Logging App Engine Analytics Server Google Analytics Compute Engine On-premise / 他社クラウド Google Spreadsheet Stream API File 4
  5. 5. BigQueryを使ってみよう 5
  6. 6. BigQueryを使ってみよう ユーザ・インタフェース ● GUI BigQuery 管理コンソール(https://bigquery.cloud.google.com) ● CLI(bqコマンド) ● Cloud Datalab (NEW!) ● API (RESTful API + 各種言語ライブラリ) ● 3rd パーティツール (Tableau, Qlikview, R, etc. ) 6
  7. 7. 7
  8. 8. Google confidential | Do not distribute BigQuery UIBigQuery UIBigQuery UI 17億件(72.7GB)のフルスキャンが6.7秒! 8
  9. 9. BigQueryを使ってみよう bq コマンド ● Python ベースのコマンドラインツール ● Google Cloud SDK にバンドル (link) ● bq コマンドの主な機能 ○ cp : テーブルのコピー ○ extract : ファイル出力 ○ insert : 行の挿入 ○ load : ファイルのロード ○ query: クエリーの実行 ○ rm: テーブルの削除 $ bq query ‘select count(*) from publicdata:samples.shakespeare’ 9
  10. 10. BigQueryを使ってみよう bq コマンド # load $ bq load dataset.table ./data.csv ./schema.json # insert $ bq insert dataset.table /tmp/mydata.json # query bq query ‘select count(*) from publicdata:samples.natality’ # extract $ bq extract --destination_format=NEWLINE_DELIMITED_JSON 94949352. ga_sessions_20150930 gs://bucketname 10
  11. 11. BigQueryを使ってみよう API ● RESTful API curl -H "$(python auth.py)" -H "Content-Type: application/json" -X POST -d {'jobReference': { 'jobId': 'job_1429217599', 'projectId': 'bigquery-e2e'}, 'configuration': { 'query': { 'query': 'SELECT ...’}}} "https://www.googleapis.com/bigquery/v2/projects/bigquery-e2e/jobs" 11
  12. 12. BigQueryを使ってみよう Google API Client Library https://cloud.google.com/bigquery/client-libraries 12
  13. 13. BigQueryを使ってみよう Google Apps Script https://cloud.google.com/bigquery/client-libraries 13
  14. 14. BigQueryを使ってみよう 3rd パーティ製ツール 14
  15. 15. BigQueryを使ってみよう Cloud Datalab 15
  16. 16. Thank you! ハンズオン1 (30分) ・Google Cloud Platformプロジェクト作成 ・請求情報の設定 ・BigQuery のサンプルクエリーを実行 ・BigQuery にデータをロードする 16 資料: http://goo.gl/ua5fQw
  17. 17. BigQueryを使ってみよう プロジェクトの構造 プロジェクト データセット テーブル 1 * * 1 プロジェクトメンバーの権限として ACL可能 テーブルを束ねる概念 データセット単位で共有設定が可能 17
  18. 18. BigQueryを使ってみよう ジョブ ● BigQueryは処理の単位をジョブとして管理 $ bq ls -a -j jobId Job Type State Start Time Duration -------------------------------------------- ---------- --------- ----------------- ---------- job_WFk8LFLjxBABcv595_77PfRAPus query SUCCESS 29 May 15:30:02 0:00:00 job_lYDOJYrbdwKXwSxRpWh6QhfNWpE query SUCCESS 29 May 14:51:46 0:00:01 job_CzrUdmhK9a95wuIGPeDAObUe5dg query SUCCESS 29 May 09:57:12 0:00:00 18
  19. 19. BigQueryを使ってみよう ジョブ ● BigQueryは処理の単位をジョブとして管理 $ bq --format json show -j job_WFk8LFLjxBABcv595_77PfRAPus {"status":{"state":"DONE"},"kind":"bigquery#job","statistics":{"query":{"cacheHit":true," totalBytesProcessed":"0"},"endTime":"1432881002581","creationTime":"1432881002386"," totalBytesProcessed":"0","startTime":"1432881002509"},"jobReference":{"projectId":"fukudak- playground","jobId":"job_WFk8LFLjxBABcv595_77PfRAPus"},"etag":"" Gn3Hpo5WaKnpFuT457VBDNMgZBw/byQrtfxSXA8MpoOtROYPvCfyNmE"","user_email":"fukudak@google.com"," configuration":{"query":{"useQueryCache":true,"destinationTable":{"projectId":"fukudak-playground"," tableId":"anon656e2eb1f794dbeb3a4233962b14d8418e618b74","datasetId":" _ccf1fa0a59a1479e1ec782cce6708e9edf3984dc"},"priority":"INTERACTIVE","writeDisposition":" WRITE_TRUNCATE","createDisposition":"CREATE_IF_NEEDED","query":"SELECTn count(*)nFROMn [bigquery-samples:wikimedia_pageviews.201201];"}},"id":"fukudak-playground: job_WFk8LFLjxBABcv595_77PfRAPus","selfLink":"https://www.googleapis. com/bigquery/v2/projects/fukudak-playground/jobs/job_WFk8LFLjxBABcv595_77PfRAPus"} 19
  20. 20. BigQueryのSQL BigQuery SQLの特徴 ● SELECTのみ ● SQLライクな構文 (ビッグデータを扱う ために拡張) ● クエリー対象のテーブル指定 ○ カンマによるUNION ○ テーブルワイルドカード関数 ● ネストテーブル ● 集計関数 ○ テーブル集計、グループ集計、ス コープ集計 ● 日付/時刻関数 ● IP関数, URL関数 ● JSON関数 / 正規表現関数 ● 文字列関数 ● ウィンドウ関数 20
  21. 21. BigQueryのSQL SQLライクな構文 ● BigQuery クエリーリファレンス ○ 英語版、日本語版 21
  22. 22. BigQueryのSQL クエリー対象のテーブル指定 SELECT foo FROM table1, table2, table3 SELECT foo FROM (SELECT * FROM table4) ● テーブルをカンマでつなげるだけでUNIONとして機能 ● サブクエリー 22
  23. 23. BigQueryのSQL クエリー対象のテーブル指定 ● テーブルワイルドカード関数 ● クエリー対象のテーブルをテーブルワイルドカード関数にて指定することが可能 ○ 日次指定 : TABLE_DATE_RANGE(), TABLE_DATE_RANGE_STRICT() ○ テーブル名のパターンマッチング : TABLE_QUERY() 23
  24. 24. BigQueryのSQL 概算値を返す関数 ● COUNT() ● 性能と正確性のトレードオフ ● 正確にカウントするには ○ EXACT_COUNT_DISTINCT 24
  25. 25. BigQueryのSQL EACH 句 ● 大きなデータを扱う場合には、シャッフルフェーズを指示する必要がある ○ GROUP EACH BY (グループの数が非常に大きい場合) ○ JOIN EACH (JOINするテーブルが大きい場合) ● 将来的には意識しなくてよくなる 25
  26. 26. Google confidential | Do not distribute 電話番号はネストした項目。 ”RECORD”型として指 定する。 PhoneNumberという親要素の下に、 areaCodeと numberという子要素が存在する モードを”REPEATED”とすると繰り返し可能なデー タになる ネスト/繰り返しフィールド 26
  27. 27. Google confidential | Do not distribute phoneNumbe r children citiesLived 繰り返し項目 ネスト/繰り返しフィールド 27
  28. 28. BigQueryのSQL ネスト/繰り返しフィールド ● FLATTEN ○ 繰り返し値を展開(FLATTEN)する ー それぞれの値毎に一行のレコードが生成される ○ BigQuery はネストデータを扱うときに自動的に FLATTENする ○ 2つ以上の繰り返し項目を扱う場合には FLATTEN句が必要なる ...(FLATTEN ([project_name:]datasetId.tableId, flattenField)).. ...(FLATTEN (subselect_clause, flattenField)).. 28
  29. 29. BigQueryのSQL ネスト/繰り返しフィールド 29 この例では繰り返し項目が一つだけ (citiesLived.place) なのでFLATTENは必 要なし
  30. 30. BigQueryのSQL ネスト/繰り返しフィールド 別の繰り返し項目を使って条件を追加 30
  31. 31. BigQueryのSQL ネスト/繰り返しフィールド 31 childrenを明示的にFLATTENEDする必要 あり。
  32. 32. BigQueryのSQL ネスト/繰り返しフィールド ChildrenChildren Name Children ChildrenCitiesLived CitiesLived YearsLivedYearsLived YearsLived ● WITHIN ○ WITHIN キーワードは、レコード内の子、複数値フィールド、ネストされたフィールドを対象とする集 計関数と併用する ● WITHIN RECORD ○ レコードに対して適用する ● WITHIN NODE ○ ノードに対して適用する 32
  33. 33. BigQueryのSQL ネスト/繰り返しフィールド SELECT fullName, count(children.name) WITHIN RECORD FROM [dataset.tableId] SELECT fullName, count(citiesLived.place) WITHIN RECORD, citiesLived.place, count(citiesLived.yearsLived) WITHIN citiesLived FROM [dataset.tableId] |- fullName: string (required) +- children: record (repeated) | |- name: string | |- age: integer +- citiesLived: record (repeated) | |- place: string | +- yearsLived: integer (repeated) 33
  34. 34. Google Analytics データ 34
  35. 35. How BigQuery export works Report UI Hit data Session data Sessionizer Aggregate Aggregated Data Aggregated Data Aggregated data Processing and Configuration Overview - Analytics Help
  36. 36. Google Analytics - Data Model http://www.google-analytics.com/r/collect? v=1&_v=j30&a=219673342&t=event&ni=1&_s=1&dl=http %3A%2F%2Fanalytics-ja.blogspot.jp%2F&ul=en- us&de=UTF-8&dt=%E3%82%A2%E3%83%8A%E3% 83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3% 82%B9%20%E6%97%A5%E6%9C%AC%E7%89%88% 20%E5%85%AC%E5%BC%8F%E3%83%96%E3%83% AD%E3%82%B0&sd=24- bit&sr=1440x900&vp=1913x610&je=1&fl=15.0% 20r0&ec=Acquisition&ea=Landing&el=% 2F&_utma=26193005. 636003885.1415289027.1415689785.1415856818.4 &_utmz=26193005.1415289027.1.1.utmcsr%3D(direct)% 7Cutmccn%3D(direct)%7Cutmcmd%3D(none) &_utmht=1415856822038&_u=eDCCgAQEY~&jid=1552 417565&cid=636003885.1415289027&tid=UA-24471868- 5&_r=1&gtm=GTM-QG2Q&cd6=636003885. 1415289027&z=1856167368 http://www.google-analytics.com/r/collect? v=1&_v=j30&a=219673342&t=event&ni=1&_s=1&dl=http %3A%2F%2Fanalytics-ja.blogspot.jp%2F&ul=en- us&de=UTF-8&dt=%E3%82%A2%E3%83%8A%E3% 83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3% 82%B9%20%E6%97%A5%E6%9C%AC%E7%89%88% 20%E5%85%AC%E5%BC%8F%E3%83%96%E3%83% AD%E3%82%B0&sd=24- bit&sr=1440x900&vp=1913x610&je=1&fl=15.0% 20r0&ec=Acquisition&ea=Landing&el=% 2F&_utma=26193005. 636003885.1415289027.1415689785.1415856818.4 &_utmz=26193005.1415289027.1.1.utmcsr%3D(direct)% 7Cutmccn%3D(direct)%7Cutmcmd%3D(none) &_utmht=1415856822038&_u=eDCCgAQEY~&jid=1552 417565&cid=636003885.1415289027&tid=UA- 24471868-5&_r=1&gtm=GTM-QG2Q&cd6=636003885. 1415289027&z=1856167368
  37. 37. Google Analytics - Data Model
  38. 38. Google Analytics データ スキーマ ● 1セッション = 1レコード ● 入れ子のデータ構造 ○ totals ○ traffic source ○ device ○ geonetwork ○ hits ■ page ■ product ■ transaction ■ item ■ eventInfo ... 38
  39. 39. Thank you! ハンズオン2 (20分) ・Google アナリティクス サンプル・データの設定 ・Google アナリティクス データに対するクエリ 39 資料: https://goo.gl/S2yvhy
  40. 40. Google Analytics データ ディメンジョンあたりの集計 40
  41. 41. Google Analytics データ ディメンジョンあたりの集計 ブラウザ種類毎にセッション数、ページビュー数を集計する ディメンジョン 指標 41
  42. 42. Google Analytics データ ディメンジョンあたりの平均直帰率 42
  43. 43. Google Analytics データ ディメンジョンあたりの平均直帰率 43
  44. 44. Google Analytics データ Cookbook 44
  45. 45. ベスト・プラクティス 45
  46. 46. Google Cloud Platform BigQuery ベスト・プラクティス ● 必要なデータのみをクエリーする ○ 必要なカラムのみ ○ テーブルを日次/月次等に分割し、必要なテーブルのみをクエリー対象とする ● 非正規化するほうが効率が良い ● キャッシュを利用 ● マスターデータはテーブル更新 (Atomic) ● データセット単位で共有することが可能 ● 中間テーブルを活用する 46
  47. 47. Google Cloud Platform BigQuery 注意事項 ● responseTooLarge 応答結果が大きすぎる ○ 圧縮後128MBまで -> 別テーブルに出力する ● resourcesExceeded リソースが足りない ○ GROUP EACH BY, EACH JOIN … ON ● quotaExceeded クォータを超えてしまう ○ クォータに注意 47
  48. 48. ● 1 TB / 月間 無償 ● $5 / TB ● 必要なカラムのみ全量 処理されれる BigQuery コスト ● $20 / TB / 月間 ● ストリーミング:  $0.01 / 200MB ● バッチロード: 無償 クエリー課金 ストレージ データ投入 48
  49. 49. Google Cloud Platform BigQuery 参考URL (1/2) ● オンラインマニュアル ○ https://cloud.google.com/bigquery/what-is-bigquery ● クエリーリファレンス ○ https://cloud.google.com/bigquery/query-reference ○ http://bqjpreference.appspot.com/ (日本語版) ● BigQuery Client Library ○ https://cloud.google.com/bigquery/client-libraries ● サポート ○ https://cloud.google.com/bigquery/support 49
  50. 50. Google Cloud Platform BigQuery 参考URL (2/2) ● 簡単スタートアップガイド ○ https://cloud.google.com/bigquery/what-is-bigquery ● Google Analytics BigQuery Export ○ スキーマ ○ Cookbook 50
  51. 51. Google Cloud Platform BigQuery まとめ ● 大量データに対するクエリーが爆速 ● 基幹サービスに影響を与えないで気軽に使える ● 導入コストが極めて低い (Try and Error しながら進めていける) ● 容量を気にしなくて良い (今まで捨てなければならなかったデータを保持できる) ● Google Analytics のデータは自動的に入ってくる 51
  52. 52. Thank you! ありがとうございました 52

×