Upload
google-cloud-platform-japan
View
3.817
Download
2
Embed Size (px)
Citation preview
BigQueryを始めてみよう!Google Analytics データを活用する
福田 潔
Google Cloud Platform セールスエンジニア
Google for Work 部門
1
Google Cloud Platform
BigQuery とは
● 億件レベルの大規模データセットに対する高速クエ
リー
● 分析用のデータウェアハウス
○ NO DELETE/UPDATE
● SQLで操作
● セットアップ、パフォーマンスチューニングやクラスタ
拡張といったインフラ作業不要
● ストレージ容量無制限。自動スケールアウト
2
Google Cloud Platform
BigQuery とは
● BIツールを使って非技術者でも操作可能
○ Tableau, QlickView, Google Spreadsheet / Microsoft Excel
● ETL
○ クエリー結果をテーブルに出力可能
○ JSON関数/正規表現関数
● データ処理エンジンとの連携
○ Hadoop, Cloud Dataflow
3
Google Cloud Platform
BigQuery 参考構成
BigQuery
ログ収集/分析基盤
Cloud Logging
App EngineAnalytics Server
Google Analytics
Compute Engine
On-premise / 他社クラウドGoogle
Spreadsheet
Stream API
File
4
BigQueryを使ってみよう
5
BigQueryを使ってみよう
ユーザ・インタフェース
● GUI BigQuery 管理コンソール(https://bigquery.cloud.google.com)
● CLI(bqコマンド)
● Cloud Datalab (NEW!)
● API (RESTful API + 各種言語ライブラリ)
● 3rd パーティツール (Tableau, Qlikview, R, etc. )
6
7
Google confidential | Do not distribute
BigQuery UIBigQuery UIBigQuery UI
17億件(72.7GB)のフルスキャンが6.7秒!
8
BigQueryを使ってみよう
bq コマンド
● Python ベースのコマンドラインツール
● Google Cloud SDK にバンドル (link)
● bq コマンドの主な機能
○ cp : テーブルのコピー
○ extract : ファイル出力
○ insert : 行の挿入
○ load : ファイルのロード
○ query: クエリーの実行
○ rm: テーブルの削除
$ bq query ‘select count(*) from publicdata:samples.shakespeare’
9
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
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
BigQueryを使ってみよう
Google API Client Library
https://cloud.google.com/bigquery/client-libraries12
BigQueryを使ってみよう
Google Apps Script
https://cloud.google.com/bigquery/client-libraries13
BigQueryを使ってみよう
Cloud Datalab
15
Thank you!
ハンズオン1 (30分) ・Google Cloud Platformプロジェクト作成・請求情報の設定・BigQuery のサンプルクエリーを実行・BigQuery にデータをロードする
16
資料: http://goo.gl/ua5fQw
BigQueryを使ってみよう
プロジェクトの構造
プロジェクト
データセット
テーブル
1
*
*
1
プロジェクトメンバーの権限として ACL可能
テーブルを束ねる概念データセット単位で共有設定が可能
17
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
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":"[email protected]","configuration":{"query":{"useQueryCache":true,"destinationTable":{"projectId":"fukudak-playground","tableId":"anon656e2eb1f794dbeb3a4233962b14d8418e618b74","datasetId":"_ccf1fa0a59a1479e1ec782cce6708e9edf3984dc"},"priority":"INTERACTIVE","writeDisposition":"WRITE_TRUNCATE","createDisposition":"CREATE_IF_NEEDED","query":"SELECT\n count(*)\nFROM\n [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
BigQueryのSQL
BigQuery SQLの特徴
● SELECTのみ
● SQLライクな構文 (ビッグデータを扱う
ために拡張)
● クエリー対象のテーブル指定
○ カンマによるUNION
○ テーブルワイルドカード関数
● ネストテーブル
● 集計関数
○ テーブル集計、グループ集計、ス
コープ集計
● 日付/時刻関数
● IP関数, URL関数
● JSON関数 / 正規表現関数
● 文字列関数
● ウィンドウ関数
20
BigQueryのSQL
SQLライクな構文
● BigQuery クエリーリファレンス
○ 英語版、日本語版
21
BigQueryのSQL
クエリー対象のテーブル指定
SELECT foo FROM table1, table2, table3SELECT foo FROM (SELECT * FROM table4)
● テーブルをカンマでつなげるだけでUNIONとして機能
● サブクエリー
22
BigQueryのSQL
クエリー対象のテーブル指定
● テーブルワイルドカード関数
● クエリー対象のテーブルをテーブルワイルドカード関数にて指定することが可能
○ 日次指定 : TABLE_DATE_RANGE(), TABLE_DATE_RANGE_STRICT()
○ テーブル名のパターンマッチング : TABLE_QUERY()
23
BigQueryのSQL
概算値を返す関数
● COUNT()
● 性能と正確性のトレードオフ
● 正確にカウントするには
○ EXACT_COUNT_DISTINCT
24
BigQueryのSQL
EACH 句
● 大きなデータを扱う場合には、シャッフルフェーズを指示する必要がある
○ GROUP EACH BY (グループの数が非常に大きい場合)
○ JOIN EACH (JOINするテーブルが大きい場合)
● 将来的には意識しなくてよくなる
25
Google confidential | Do not distribute
電話番号はネストした項目。 ”RECORD”型として指定する。PhoneNumberという親要素の下に、areaCodeとnumberという子要素が存在する
モードを”REPEATED”とすると繰り返し可能なデータになる
ネスト/繰り返しフィールド
26
Google confidential | Do not distribute
phoneNumber
children citiesLived
繰り返し項目
ネスト/繰り返しフィールド
27
BigQueryのSQL
ネスト/繰り返しフィールド
● FLATTEN
○ 繰り返し値を展開(FLATTEN)する ー それぞれの値毎に一行のレコードが生成される
○ BigQuery はネストデータを扱うときに自動的に FLATTENする
○ 2つ以上の繰り返し項目を扱う場合には FLATTEN句が必要なる
...(FLATTEN ([project_name:]datasetId.tableId, flattenField))..
...(FLATTEN (subselect_clause, flattenField))..
28
BigQueryのSQL
ネスト/繰り返しフィールド
29
この例では繰り返し項目が一つだけ(citiesLived.place) なのでFLATTENは必要なし
BigQueryのSQL
ネスト/繰り返しフィールド
別の繰り返し項目を使って条件を追加
30
BigQueryのSQL
ネスト/繰り返しフィールド
31
childrenを明示的にFLATTENEDする必要あり。
BigQueryのSQL
ネスト/繰り返しフィールド
ChildrenChildrenName
Children
ChildrenCitiesLivedCitiesLivedYearsLivedYearsLivedYearsLived
● WITHIN○ WITHIN キーワードは、レコード内の子、複数値フィールド、ネストされたフィールドを対象とする集
計関数と併用する
● WITHIN RECORD○ レコードに対して適用する
● WITHIN NODE○ ノードに対して適用する
32
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
Google Analytics データ
34
How BigQuery export works
Report UI
Hit data Session dataSessionizer
AggregateAggregated
DataAggregated
DataAggregated
data
Processing and Configuration Overview - Analytics Help
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=1552417565&cid=636003885.1415289027&tid=UA-24471868-5&_r=1>m=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=1552417565&cid=636003885.1415289027&tid=UA-24471868-5&_r=1>m=GTM-QG2Q&cd6=636003885.1415289027&z=1856167368
Google Analytics - Data Model
Google Analytics データ
スキーマ
● 1セッション = 1レコード
● 入れ子のデータ構造
○ totals○ traffic source○ device○ geonetwork○ hits
■ page■ product■ transaction■ item■ eventInfo ...
38
Thank you!
ハンズオン2 (20分)
・Google アナリティクス サンプル・データの設定・Google アナリティクス データに対するクエリ
39
資料: https://goo.gl/S2yvhy
Google Analytics データ
ディメンジョンあたりの集計
40
Google Analytics データ
ディメンジョンあたりの集計
ブラウザ種類毎にセッション数、ページビュー数を集計する
ディメンジョン
指標
41
Google Analytics データ
ディメンジョンあたりの平均直帰率
42
Google Analytics データ
ディメンジョンあたりの平均直帰率
43
ベスト・プラクティス
45
Google Cloud Platform
BigQuery ベスト・プラクティス
● 必要なデータのみをクエリーする
○ 必要なカラムのみ
○ テーブルを日次/月次等に分割し、必要なテーブルのみをクエリー対象とする
● 非正規化するほうが効率が良い
● キャッシュを利用
● マスターデータはテーブル更新 (Atomic)
● データセット単位で共有することが可能
● 中間テーブルを活用する
46
Google Cloud Platform
BigQuery 注意事項
● responseTooLarge 応答結果が大きすぎる
○ 圧縮後128MBまで -> 別テーブルに出力する
● resourcesExceeded リソースが足りない
○ GROUP EACH BY, EACH JOIN … ON
● quotaExceeded クォータを超えてしまう
○ クォータに注意
47
● 1 TB / 月間 無償
● $5 / TB● 必要なカラムのみ全量
処理されれる
BigQuery コスト
● $20 / TB / 月間 ● ストリーミング : $0.01 / 200MB
● バッチロード : 無償
クエリー課金 ストレージ データ投入
48
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
Google Cloud Platform
BigQuery 参考URL (2/2)
● 簡単スタートアップガイド
○ https://cloud.google.com/bigquery/what-is-bigquery
● Google Analytics BigQuery Export
○ スキーマ
○ Cookbook
50
Google Cloud Platform
BigQuery まとめ
● 大量データに対するクエリーが爆速
● 基幹サービスに影響を与えないで気軽に使える
● 導入コストが極めて低い (Try and Error しながら進めていける)
● 容量を気にしなくて良い (今まで捨てなければならなかったデータを保持できる)
● Google Analytics のデータは自動的に入ってくる
51
Thank you!
ありがとうございました
52