Google	BigQuery	を
使ってみた
2018-02-14	下野寿之
この資料は社内関係者の許可を得て、BigQuery を
初めて使って分かったことを人に随時説明するために、
補助資料として作ったものを公開するものです。
BigQuery とは
ØGoogle	クラウドのサービスの1つ。
ØSQL⽂でデータの参照が出来る。
ØSQL⽂のUpdate	と Deleteはできない。
Øインデックスも無いようだ。
Øとにかく速い。
Ø裏で数千台数万台のサーバーに計算を⾛らせている。
Ø今まで、2分以上かかったことが無い。
Ø簡単な計算は10〜15秒。簡単なのに60秒かかることもある。
Ø料⾦は 1TB(テラバイト)の参照に5ドル。
Øデータを1週間保管すると、同じ料⾦がかかる。
ØCPUに負荷がかかるような計算をしても、⼀定。
Ø参照する列(カラム)を減らすと、節約可能。
ØWhere	句で参照する⾏が、コスト上は減らない。
BigQueryを使う為には
• データのインポート:	
• GoogleクラウドのGCS(Google	Cloud	Storage)に
データファイルを載せて、インポートを要する。
• ブラウザで使う
• Googleアカウントを1つだけログインして使う。
• 他のGoogleアカウントは使えない。
• ブラウザはChrome	も Canaryも同時に起動すると、
メールやGoogleドライブの参照に便利。
BigQuery	のSQL
• Legacy と標準(Standard)	SQL の選択が必要。
• ブラウザでオプション設定して使う。
• Legacyはjoinやcount(distinct	..)に各種配慮が必要。
• ジョイン(複数のテーブルの結合)
• 最近は、{left,	right,	full} outer	join	が全て実⾏可能。
• 共有メモリの制約が気になったものの、問題無し。
• Over()句を使った分析関数が使える。
• Row_numer,	rank,	ntile,	approx_{top_count ,quantile}
• 配列も使える。
• 正規表現(regular	expression)による演算も可能。
BigQueryの結果の出⼒
• 20〜30⾏以内:
• ブラウザからエクセルへコピペする。
• 少しコツが必要。コピー領域は出⼒表の
最後のセルをぴったり選択する必要があるようだ。
• 約1万⾏以内:	
• CSV	形式ですぐ出⼒出来る。
• “配列” を含むセルが存在すると、出⼒不能になる。
• それ以上 :	
• Google	Cloud	Storage	を経由する。
• ローカルにGoogle	Cloud	SDK が必要のようだ。
select	age,	q6[offset(1)],	q6[offset(2)],	q6[offset(3)],	q6[offset(4)],	q6[offset(5)]	
from	
(select	age,	approx_quantile(pay,6)	q6	from	T01	inner	join	PAY2016	using	(	card_id )	
group	by	age	)		
1/6										2/6											3/6										4/6									5/6
参照した4個の表 :		6	- 請求情報 7-確定情報 8-月次請求額 22-支払判定
6と7と22に各⽀払の⽇付情報あり。6と7と8に、毎⽉の締年⽉の⽇付列あり。
Select	PAY16.annual_pay	,	T07.price	from	T07	inner	join	PAY16	using	(	card_id )	
where		rand	()	<	T07.price	/	57.124e8
#	各⽀払の額の57億1240万円に対する⽐で、ランダムに確率抽出。
図は R⾔語でプロット
2016年に2000万円以上請求されたカードによる、全体金額への貢献は約1%。

BigQueryを使ってみた(2018年2月)