Weitere ähnliche Inhalte Ähnlich wie BigQueryを始めてみよう - Google Analytics データを活用する (20) Mehr von Google Cloud Platform - Japan (20) BigQueryを始めてみよう - Google Analytics データを活用する2. Google Cloud Platform
BigQuery とは
● 億件レベルの大規模データセットに対する高速クエ
リー
● 分析用のデータウェアハウス
○ NO DELETE/UPDATE
● SQLで操作
● セットアップ、パフォーマンスチューニングやクラスタ
拡張といったインフラ作業不要
● ストレージ容量無制限。自動スケールアウト
2
3. Google Cloud Platform
BigQuery とは
● BIツールを使って非技術者でも操作可能
○ Tableau, QlickView, Google Spreadsheet /
Microsoft Excel
● ETL
○ クエリー結果をテーブルに出力可能
○ JSON関数/正規表現関数
● データ処理エンジンとの連携
○ Hadoop, Cloud Dataflow
3
4. Google Cloud Platform
BigQuery 参考構成
BigQuery
ログ収集/分析基盤
Cloud Logging
App Engine
Analytics Server
Google Analytics
Compute Engine
On-premise / 他社クラウド
Google
Spreadsheet
Stream API
File
4
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. 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. 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
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. 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. BigQueryのSQL
BigQuery SQLの特徴
● SELECTのみ
● SQLライクな構文 (ビッグデータを扱う
ために拡張)
● クエリー対象のテーブル指定
○ カンマによるUNION
○ テーブルワイルドカード関数
● ネストテーブル
● 集計関数
○ テーブル集計、グループ集計、ス
コープ集計
● 日付/時刻関数
● IP関数, URL関数
● JSON関数 / 正規表現関数
● 文字列関数
● ウィンドウ関数
20
26. Google confidential | Do not distribute
電話番号はネストした項目。 ”RECORD”型として指
定する。
PhoneNumberという親要素の下に、 areaCodeと
numberという子要素が存在する
モードを”REPEATED”とすると繰り返し可能なデー
タになる
ネスト/繰り返しフィールド
26
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
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. 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>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=1552
417565&cid=636003885.1415289027&tid=UA-
24471868-5&_r=1>m=GTM-QG2Q&cd6=636003885.
1415289027&z=1856167368
38. Google Analytics データ
スキーマ
● 1セッション = 1レコード
● 入れ子のデータ構造
○ totals
○ traffic source
○ device
○ geonetwork
○ hits
■ page
■ product
■ transaction
■ item
■ eventInfo ...
38
46. Google Cloud Platform
BigQuery ベスト・プラクティス
● 必要なデータのみをクエリーする
○ 必要なカラムのみ
○ テーブルを日次/月次等に分割し、必要なテーブルのみをクエリー対象とする
● 非正規化するほうが効率が良い
● キャッシュを利用
● マスターデータはテーブル更新 (Atomic)
● データセット単位で共有することが可能
● 中間テーブルを活用する
46
47. Google Cloud Platform
BigQuery 注意事項
● responseTooLarge 応答結果が大きすぎる
○ 圧縮後128MBまで -> 別テーブルに出力する
● resourcesExceeded リソースが足りない
○ GROUP EACH BY, EACH JOIN … ON
● quotaExceeded クォータを超えてしまう
○ クォータに注意
47
48. ● 1 TB / 月間 無償
● $5 / TB
● 必要なカラムのみ全量
処理されれる
BigQuery コスト
● $20 / TB / 月間 ● ストリーミング: $0.01
/ 200MB
● バッチロード: 無償
クエリー課金 ストレージ データ投入
48
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. Google Cloud Platform
BigQuery 参考URL (2/2)
● 簡単スタートアップガイド
○ https://cloud.google.com/bigquery/what-is-bigquery
● Google Analytics BigQuery Export
○ スキーマ
○ Cookbook
50
51. Google Cloud Platform
BigQuery まとめ
● 大量データに対するクエリーが爆速
● 基幹サービスに影響を与えないで気軽に使える
● 導入コストが極めて低い (Try and Error しながら進めていける)
● 容量を気にしなくて良い (今まで捨てなければならなかったデータを保持できる)
● Google Analytics のデータは自動的に入ってくる
51
Hinweis der Redaktion 以前は6.7秒かかっていたクエリーが今は2.3秒で。
アーキテクチャの改善により性能改善。
シャッフルのスループットが4倍
クラスタサイズが5倍
クラスタが追加
ディスク保存のフォーマットを変更(ColumnIOからの置き換え)
ディスク保存のエンコード形式を変更
等
Projects. A project contains information such as subscribed service API(s), authentication information, billing information and Access Control Lists (ACLs) that determine access to the Datasets and the Jobs. Projects are created and managed using the APIs Console. For information about the related API type, see Projects.
Datasets. A dataset is a grouping mechanism that holds zero or more tables. A dataset is the lowest level unit of access control. You cannot control access at the table level. A dataset is contained within a specific project. Each dataset can be shared with individual users. Datasets are also referenced in the SQL statements when interacting with BigQuery. For information about the related API type, see Datasets.
Tables. Row-column structures that contain actual data. They belong to a Dataset. You cannot control access at the table level, you do it at Dataset level. For information about the related API type, see Tables.
Jobs. Jobs are used to start all potentially long-running actions, such as queries, table import, and export requests. Shorter actions, such as list or get requests, are not managed by a job resource. For information about the related API type, see Jobs. Each job has a job id. A very good use of job id is when you load a large dataset. BigQuery rejects load job with the same job id. Therefore, guaranteeing that data would not be loaded twice. DISTINCT キーワードを使うと、指定されたフィールドの異なる値の数を返します。ただし、DISTINCT を指定したときに返される値は統計的近似値であり、正確性は保証されていないので注意してください。
COUNT(DISTINCT) から返される値の精度を上げなければならない場合には、第 2 引数として <n> という数値を指定します。この数値未満の値なら正確であることが保証されます。デフォルトの <n> は 1000 ですが、それよりも大きい <n> を指定すれば、その値までのCOUNT(DISTINCT) の戻り値は正確なものになります。しかし、<n> の値を大きくすると、この演算子のスケーラビリティが下がり、クエリーの実行時間が大幅に延びたり、クエリーがエラーを起こしたりすることがあります。
SELECT
device.browser,
SUM ( totals.visits ) AS Sessions,
SUM(totals.pageviews) AS Pageiews
FROM
TABLE_DATE_RANGE([94949352.ga_sessions_], TIMESTAMP('2015-08-01'), TIMESTAMP('2015-09-30'))
GROUP BY
device.browser
ORDER BY
Sessions DESC
SELECT
trafficSource.source,
total_visits AS Sessions,
( ( total_no_of_bounces / total_visits ) * 100 ) AS bounce_rate
FROM (
SELECT
trafficSource.source,
COUNT ( trafficSource.source ) AS total_visits,
COUNT ( totals.bounces ) AS total_no_of_bounces
FROM
TABLE_DATE_RANGE([94949352.ga_sessions_], TIMESTAMP('2015-09-01'), TIMESTAMP('2015-09-30'))
WHERE
totals.pageviews = 1
GROUP BY
trafficSource.source )
GROUP BY
trafficSource.source,
bounce_rate,
Sessions
ORDER BY
Sessions DESC;