1. Confidential & Proprietary
Google Cloud ベストプラクティス
Google BigQueryData ingestion into BigQuery / Writing Queries in BigQuery
/ Data extraction and exportation from BigQuery
Google Cloud カスタマーエンジニア
2. Confidential & Proprietary
Agenda
● Data Ingestion into BigQuery
● Writing Queries in BigQuery
● Data extraction and exportation
from BigQuery
Google Cloud ベストプラクティス Google BigQuery
※このスライドは 2017 年 12 月時点の情報に基づき作成しています。最新情報は Google Cloud Platform のドキュメントをご参照ください。
https://cloud.google.com/docs/
4. Google Cloud ベストプラクティス Google BigQuery
Confidential & Proprietary
Cloud Logs
Google App Engine
Google Analytics
Premium
Cloud Pub/Sub
BigQuery Storage
(tables)
Cloud Bigtable
(NoSQL)
Cloud Storage
(files)
BigQuery Analytics
(SQL)
Capture Store Analyze
Batch
Cloud DataStore
Process
Stream
Cloud Monitoring
Cloud
Bigtable
Real time analytics
and Alerts
Cloud Dataflow
Cloud Dataproc
Cloud Dataproc
In some cases data can end
up in storage and then again
be processed or enriched by
Cloud Dataflow
GCP におけるデータ処理
5. Google Cloud ベストプラクティス Google BigQuery
Confidential & Proprietary
<POST>
データソース
● Google Cloud Storage (GCS)
● アップロード (POST request)
● Google Cloud Datastore のバックアップ
● Google Analytics Premium
● Stackdriver Logging からのログエクスポート
● Firebase
6. Google Cloud ベストプラクティス Google BigQuery
Confidential & Proprietary
データの取り込み方法
Data Loading
● データをジョブでまとめて取り込む
Streaming Insert
● リアルタイムに近い方式でデータを取り込む
共通のポイント
● 両者ともクエリ実行環境とはリソース分離
● データ取り込み/クエリ実行のパフォーマンスは互いに影響しない
7. Google Cloud ベストプラクティス Google BigQuery
Confidential & Proprietary
jobid
データを一括で取り込む
Data Loading
● 実行自体は無料
○ (データのストレージには課金有 )
8. Google Cloud ベストプラクティス Google BigQuery
Confidential & Proprietary
データをストリーム
Streaming Insert
● 小規模かつ頻繁なテーブル更新は Data Loadingには向かない
● すぐにデータを見たいという場合も同様
● 有料 ($0.05/GB*month)
● Fluentdなどを利用して実装するのが楽
● データ増加してもジョブが終わらない、という心配がなくなる
9. Google Cloud ベストプラクティス Google BigQuery
Confidential & Proprietary
[Consistency|Availability|Speed|Cost] はトレードオフ:
Consistency Availability Speed Cost
Data Loading
スループット最適化
強整合性
Load Job が完了し
たらすぐ使える
Job が完了しない
と読み込めない
Free
Streaming Insert
レイテンシー最適化
結果整合性
Insert から分析ま
で数 ms 秒, Export
や Copy まで Max
90min
リアルタイム
$0.05/GB
*month
データ取り込み方法の選択
11. Google Cloud ベストプラクティス Google BigQuery
Confidential & Proprietary
大規模データの取り込み - クオータ
変更できないクオータはアーキテクチャ設計で対応
● ロードジョブの最大サイズ :
○ ファイルを分割, or 制限のより大きな形式に変更
○ Avro: block size で 16MB, CSV: row と cell で 2MB
● すべてのテーブルクオータ : Table を Shard
○ Streaming insert
■ maximum rows per second per table, maximum bytes per second per table
○ Load jobs
■ maximum number of loads per table per day
https://cloud.google.com/bigquery/quota-policy
12. Google Cloud ベストプラクティス Google BigQuery
Confidential & Proprietary
大規模データの取り込み - クオータ
https://cloud.google.com/bigquery/quota-policy
クオータ変更リクエスト : API Managerより実施
14. Google Cloud ベストプラクティス Google BigQuery
Confidential & Proprietary
Compute
App
Engine
Container
Engine
Compute
Engine
BigQuery
Stream Insert
Data Load
Stackdriver
Logging
Storage and Databases
Cloud
Storage
Cloud
Datastore
Cloud
Pub/Sub
Cloud
Dataflow
データ取り込みの実装 (GCP 内部)
15. Google Cloud ベストプラクティス Google BigQuery
Confidential & Proprietary
On Premise
Other Cloud Service
BigQuery
Stream Insert
Data Load
Logging
Storage and Databases
Cloud
Storage
Server
Instance
Cloud
Storage
SQL
Database
Cloud
Pub/Sub
Bq
Command,
3rd pary tools
etc.
Storage
Transfer
Service
Cloud
Dataflow
データ取り込みの実装 (GCP 外部)
24. Google Cloud ベストプラクティス Google BigQuery
Confidential & Proprietary
Legacy SQL - SQLライクな構文
● BigQuery クエリ リファレンス
○ 英語版、日本語版
25. Google Cloud ベストプラクティス Google BigQuery
Confidential & Proprietary
Standard SQL
● SQL 2011 準拠
● DML: Update, Delete, Insert をサポート
○ DMLにはクオータあり
○ Max UPDATE/DELETE /day /table : 48
○ Max UPDATE/DELETE / day /project: 500
○ Max INSERT / day / table: 1000
○ Max INSERT / day / project: 10,000
● Standard SQL クエリ リファレンス
26. Google Cloud ベストプラクティス Google BigQuery
Confidential & Proprietary
SELECT lower(word) as word,
word_count AS frequency, corpus
FROM [publicdata:samples.shakespeare]
WHERE corpus CONTAINS “king” and
LENGTH(word) > 5
ORDER BY frequency DESC
SELECT lower(word) as word,
word_count AS frequency, corpus
FROM `publicdata.samples.shakespeare`
WHERE corpus LIKE ‘%king%’ and
LENGTH(word) > 5
ORDER BY frequency DESC;
Query Examples - Filtering
Standard SQL BigQuery SQL (Legacy)
27. Google Cloud ベストプラクティス Google BigQuery
Confidential & Proprietary
SELECT emp.Name AS EMPLOYEE,
dep.Name AS DEPARTMENT
FROM EMPLOYEE emp, DEPARTMENT dep
WHERE emp.dept_id = dep.dept_id
ORDER BY emp.NAME
SELECT emp.Name AS EMPLOYEE,
dep.Name AS DEPARTMENT
FROM [myproject:mycompany.EMPLOYEE] as emp
JOIN [myproject:mycompany.DEPARTMENT] as dep
ON emp.dept_id = dep.dept_id
ORDER BY EMPLOYEE
Standard SQL BigQuery SQL (Legacy)
Note: このクエリ構造はテーブル参照を除きANSI SQL
syntaxに似ています
Query Examples - Joins
28. Confidential & Proprietary
Google Cloud ベストプラクティス Google BigQuery
● JOIN は 2 つのテーブルを指定して、 1 つ目のテーブルと 2 つ目のテーブルのすべての行のマッチしま
す
● ON 句が必要です ( CROSS JOINを除く )
● BigQuery は INNER, [FULL|RIGHT|LEFT] OUTER と CROSS JOIN をサポートします。 デフォルトは
INNER です
SELECT …
FROM DATASET.TABLE1
[INNER|[FULL|RIGHT|LEFT] OUTER|CROSS] JOIN
DATASET.TABLE2
[ON join_condition_1 [... AND join_condition_n]
SELECT FROM - Joins
29. Google Cloud ベストプラクティス Google BigQuery
Confidential & Proprietary
SELECT DISTINCT dept_id
FROM ( SELECT dept_id FROM EMPLOYEE
UNION ALL
SELECT dept_id FROM DEPARTMENT)
SELECT dept_id FROM
(SELECT dept_id FROM mycompany.EMPLOYEE),
(SELECT dept_id FROM mycompany.DEPARTMENT)
GROUP BY dept_id
Query Examples - Unions
Standard SQL BigQuery SQL (Legacy)
30. Confidential & Proprietary
Google Cloud ベストプラクティス Google BigQuery
● 出産した年齢が最も高い母親を探す; state, year, と ageを表示
SELECT state, source_year AS year, mother_age AS age
FROM `publicdata.samples.natality`
ORDER BY age DESC
LIMIT 1
● 最新年の州の略称で集計した出生数で検索する
SELECT state, source_year AS year, COUNT(*) as number
FROM `publicdata.samples.natality`
WHERE state IS NOT NULL AND year IS NOT NULL
GROUP BY state, year
ORDER BY year DESC
LIMIT 5
BigQuery Example- Limit
31. Confidential & Proprietary
Google Cloud ベストプラクティス Google BigQuery
● 公的な天候データから、月ごとのパリの Hot days (> 83 degrees) をカウントする
SELECT year, month, count(round(mean_temp)) AS num_hot_days
FROM `publicdata.samples.gsod`
WHERE station_number = 071490 AND mean_temp > 83
GROUP BY year, month
ORDER BY num_hot_days DESC, month DESC
LIMIT 10
More Examples
32. Confidential & Proprietary
Google Cloud ベストプラクティス Google BigQuery
● bq command line tool を使い、ロンドン・ヒースロー空港 (station 037720)の最新
10 日で雷雨の日を見つける
> bq query “SELECT year, month, day, thunder, rain FROM
`publicdata.samples.gsod` WHERE thunder = TRUE AND rain =
TRUE AND station_number = 037720 ORDER BY year DESC, month
DESC, day DESC LIMIT 10”
More Examples
33. Confidential & Proprietary
Google Cloud ベストプラクティス Google BigQuery
● 複雑なプロセスの場合には sub-select 分を使ったほうが簡単なときがある
● sub-select 句の結果は、外部の SQL Select 句のソーステーブルとして使われる
SELECT …
FROM (
SELECT …
FROM ..
)
SELECT FROM – Sub-Select
34. Confidential & Proprietary
Google Cloud ベストプラクティス Google BigQuery
● シンプルなクエリを使うと複合クエリを使える
● Joins の Sub-Select
SELECT …
FROM
[dataset.table1] as T1
JOIN
[dataset.table2] as T2 ON T1.x = T2.x
JOIN
(SELECT … FROM dataset.table3) as T3 ON T1.y = T3.y
WHERE ...
SELECT FROM – Sub-Select Join
35. Confidential & Proprietary
Google Cloud ベストプラクティス Google BigQuery
● 他の SQL ベースのシステムとは違い、BigQuery は Join ではなくテーブルの
Union をカンマで示します。
● 同様のスキーマを持つ複数テーブルへのクエリ
● Join と Union
SELECT …
FROM
[dataset.table1],[dataset.table2],[dataset.table3] AS T1
JOIN
(SELECT … FROM dataset.table4) as T4 ON T1.y = T4.y
WHERE ...
SELECT FROM – Union
36. Google Cloud ベストプラクティス Google BigQuery
Confidential & Proprietary
● Dry Run によりスキャンサイズが確認可能 (Web UI | bq コマンド | API)
● エラーも事前検出出来る
Click
Query Tips
42. Google Cloud ベストプラクティス Google BigQuery
Confidential & Proprietary
テキサスで”J”で始まる人気の名前トップ100
BigQuery からのデータ抽出 - 他のテーブルへのエクスポート
43. Google Cloud ベストプラクティス Google BigQuery
Confidential & Proprietary
テキサスで”J”で始まる人気の名前トップ100
BigQuery からのデータ抽出 - 他のテーブルへのエクスポート
44. Google Cloud ベストプラクティス Google BigQuery
Confidential & Proprietary
BigQuery からのデータ抽出 - Cloud Storage へのエクスポート
テーブルの GCS へのエクスポート
45. Google Cloud ベストプラクティス Google BigQuery
Confidential & Proprietary
BigQuery からのデータ抽出 - Cloud Storage へのエクスポート
テーブルの GCS へのエクスポート
46. Google BigQuery
Google Cloud ベストプラクティス
Thank you
1 : Introduction / BigQuery Organization / Exploring and Interacting with BigQuery
2 : Data ingestion into BigQuery / Writing Queries in BigQuery / Data extraction and exportation from BigQuery
3 : Best Practices and Performance Optimization / Cost Optimization