18. Cloud OnAir
サンプルクエリの処理
SELECT
state,
COUNT(*) as babyCount
FROM [publicdata:samples.natality]
WHERE
year >= 1980 AND year < 1990
GROUP BY state
ORDER BY babyCount DESC
LIMIT 10
1980年から1990年の
間に生まれた赤ちゃんの
数が最も多い10州の
リストを生成。
各州別の内訳を表示。
19. Cloud OnAir
● このクエリでは、2つの
フィールドだけを読み込む必要が
ある(州と年)。
● 分散ファイルシステムでは、
シャードはデータのチャンクを
並行して読み込む。
● 各シャードはローカルで
集約したデータを中間シャードに
渡すだけで良いため、データ量は
50 States に削減される。
● ルートマスターは、最終的な集約、
ソート、制限、およびクライアントへのデータ
の返却を行う。SELECT state, year
~138M Rows
COUNT(*)
GROUP BY state
WHERE year >= 1980 and year < 1990
~3.5K Rows
LIMIT 10
ORDER BY count_babies DESC
COUNT(*)
GROUP BY state
COUNT(*)
GROUP BY state
Distributed Storage
Shard Shard ShardShard
Shard ShardShard Shard
Master
50 States
サンプルクエリの処理 : クエリの並行処理
24. Cloud OnAir
ユーザインタフェース
● GUI BigQuery 管理コンソール
● CLI(bqコマンド)
● Cloud Datalab
● Google Data Studio
● 3rd パーティツール (Tableau, Qlikview, R etc. )
● API (RESTful API + 各種言語ライブラリ)
35. Cloud OnAir
データの取り込み
On Premise
Other Cloud Service
BigQuery
Stream Insert
Data Load
Loading
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
43. Cloud OnAir
必要なカラムのみクエリする
● BigQuery はカラム指向ストレージ
● 指定されたカラムは上から下までフルスキャンされる
● パフォーマンス、コストの観点から必要なカラムのみクエリをする
SELECT id, cost FROM table
SELECT GKGRECORDID FROM
`gdelt-bq.hathitrustbooks.1800`
id name cost date
SELECT * FROM
`gdelt-bq.hathitrustbooks.1800`
44. Cloud OnAir
分割テーブル (PARTITIONED TABLE)
● テーブルを パーティション に分割する
● データが挿入された日付で分割がされる 日付分割
● 最新のデータ(7 日間)のみ取得するビューを作るなど、
スキャン対象データを絞れる
#standardSQL
SELECT
*
FROM
mydataset.partitioned_table
WHERE
_PARTITIONTIME BETWEEN
TIMESTAMP_TRUNC(TIMESTAMP_SUB(CURRENT_TIMES
TAMP(), INTERVAL 7 * 24 HOUR),DAY)
AND
TIMESTAMP_TRUNC(CURRENT_TIMESTAMP(),DAY);
#Caluculate the cost for today
#standardSQL
SELECT service.description, SUM(cost)
FROM
`playground.billing_dashboard.gcp_billing_exp
ort_v1_00AFE2_6C3561_890001`
WHERE
_PARTITIONTIME = TIMESTAMP("2017-10-13")
GROUP BY service.id, service.description
LIMIT
1000
55. Cloud OnAir
カラムベースパーティショニング
2018-01-01
c1 c2 c3 eventDate c5
SELECT c1, c3 FROM ...
WHERE eventDate BETWEEN “2018-01-03” AND “2018-01-05”
2018-01-02
2018-01-03
2018-01-04
2018-01-05
56. Cloud OnAir
カラムベースパーティショニング
2018-01-01
c1 c2 c3 eventDate c5
SELECT c1, c3 FROM ...
WHERE eventDate BETWEEN “2018-01-03” AND “2018-01-05”
2018-01-02
2018-01-03
2018-01-04
2018-01-05
57. Cloud OnAir
クラスタリング
2018-01-01
c1 userId c3 eventDate c5
SELECT c1, c3 FROM ... WHERE userId BETWEEN 52 and 63
AND eventDate BETWEEN “2018-01-03” AND “2018-01-05”
2018-01-02
2018-01-03
2018-01-04
2018-01-05
58. Cloud OnAir
クラスタリング
2018-01-01
c1 userId c3 eventDate c5
SELECT c1, c3 FROM ... WHERE userId BETWEEN 52 and 63
AND eventDate BETWEEN “2018-01-03” AND “2018-01-05”
2018-01-02
2018-01-03
2018-01-04
2018-01-05
59. Cloud OnAir
クラスタリング
2018-01-01
c1 userId c3 eventDate c5
SELECT c1, c3 FROM ... WHERE userId BETWEEN 52 and 63
AND eventDate BETWEEN “2018-01-03” AND “2018-01-05”
2018-01-02
2018-01-03
2018-01-04
2018-01-05
60. Cloud OnAir
クラスタリング
2018-01-01
c1 userId c3 eventDate c5
SELECT c1, c3 FROM ... WHERE userId BETWEEN 52 and 63
AND eventDate BETWEEN “2018-01-03” AND “2018-01-05”
2018-01-02
2018-01-03
2018-01-04
2018-01-05