狠狠撸

狠狠撸Share a Scribd company logo
BigQueryってなんぞ
~ これだけ知っていればドヤ顔でBigQueryを語れる ~
2015-12-25 新田 智啓
1
目次
2
? BigQuery概要
? BigQueryをちょっと試してみる
? BigQueryの基本 & Tips
? BigQueryの課金を減らす
? BigQueryまとめ
BigQuery概要
3
? Googleが出しているデータベースストレージ
? フルマネージドサービス(複数地域に透過的なレプリケーション)
? デカイデータも処理可能(ペタバイト級もらくらく)
? 従量課金制 (怖い)
? 列指向 (Indexは無い ってか要らない)
? WriteとReadのみ。Updateは出来ない(と思っておいたほうがよい)
BigQuery概要
4
? 分析に使う想定で、どんな軸でデータを見たいかを?
事前にIndex設計とかしきれないよね。
? データとして取れている、いろいろ全部の項目を?
分析に使いたいよね。
? 全部に滨苍诲别虫张るとか出来ないの?
BigQuery概要
5
? Google的発想での解決
? Index決めるのが無理なら、?
全部スキャンすればいいじゃない
?↓?
超絶マシン台数を用意して分散処理
BigQuery概要
6
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Compute
Node
Distributed ?le storage layer (table)
results
BigQuery概要
7
? なんとなくすごい
トライアル
8
? BigQueryを試してみる
トライアル
9
トライアル
10
トライアル
11
トライアル
12
トライアル
13
? 画面のCreate New Tableからテーブル作成出来る
? CSVファイルなども手軽にimport
? Google Cloud Storageにあるデータも簡単にload
? 転送量無料 (バルク処理のみ、ストリームは有料)
トライアル
14
トライアル
15
BigQueryの基本&Tips
16
? BigQueryの基本&Tips
BigQueryの基本&Tips
17
? BigQueryは時に処理を数千台で行われる
? 指定されたテーブルの全てのデータを?
スキャンして処理を行う
? データサイズは数PBでも問題がない
? データサイズにもよるがクエリは数秒~数分で返ってくる
? クエリでスキャンしたデータ量に対して課金
BigQueryの基本&Tips
18
? データのインポート 無料
? データのエクスポート 無料
? ストレージ 1GBあたり$0.020/月 ?
(参考: AWSの東京S3は$0.019 /GB + In/Outの転送量)
? クエリ でスキャンしたデータ量1TBあたり$5?
(月ごとに1TBの無料利用枠あり)
? Streaming Insert 200MBあたり$0.01?
(以前は10万行につき$0.01)
BigQueryの基本&Tips
19
? プロジェクト > データセット > テーブル?
の階層構造
? 列指向データベース
? 全てのデータは登録した時の時間を持つ
? Google Cloud Storage と相性が良い
? Streamingでデータ投入可能(課金されます)
BigQueryの基本&Tips
20
? 基本はスキーマ定義する
? JSONを使うとスキーマレスで運用できる?
(SQLが難しくなるので、ご利用は計画的に)
? Streamingでの登録は ?uent-plugin-bigqueryもある
? ローカルなど他の場所にあるデータは?
GCS(Google Cloud Storage)に入れてから?
BigQueryにインポートすると早い (bq loadコマンド)
BigQueryの基本&Tips
21
? bq コマンド
? ls : プロジェクトやデータセットの一覧を表示
? load : ファイルなどをロード
? mk : テーブル作成
? cp : テーブルなどのコピー
? query : クエリの実行
もっと知りたい人はこちら
https://cloud.google.com/bigquery/bq-command-line-tool
BigQueryの基本&Tips
22
? BigQueryのSyntax
? SELECT
? JOIN
? FROM
? WHERE
? ORDER BY
もっと知りたい人はこちら
https://cloud.google.com/bigquery/query-reference
.
? GROUP BY
? HAVING
? LIMIT
? ROLLUP
? OMIT…IF
BigQueryの基本&Tips
23
もっと知りたい人はこちら
https://cloud.google.com/bigquery/query-reference
BigQueryの基本&Tips
24
? Tips: BigQueryのCOUNT function
? COUNT(DISTINCT(?eld_name))は概算値を返す
? ?eldの値はnon-nullな値をCount
? 正確な数値が欲しい場合は?
EXACT_COUNT_DISTINCTもしくは?
GROUP EACH BYしてCOUNT(*) の値を取得する
? BigQueryのCOUNTは第2引数があり、COUNTの概
算値を出す時の精度を指定する。(デフォルト:1000)
BigQueryの基本&Tips
25
? BigQueryのJSONで使えるSyntax
? JSON_EXTRACT : JSONのパスからvalueを取り出す
? FLATTEN : 配列を1行のデータへ置き換える
? WITHIN : JSONのNodeからデータを取り出す
? WITHIN RECODE: JSONのレコードからデータを取り出す
もっと知りたい人はこちら
https://cloud.google.com/bigquery/query-reference
BigQueryの基本&Tips
26
? Table wildcard functions
? TABLE_DATE_RANGE
? TABLE_DATE_RANGE_STRICT
? TABLE_QUERY
もっと知りたい人はこちら
https://cloud.google.com/bigquery/query-reference
※具体的な使い方は後述
BigQueryの基本&Tips
27
? Table Decorators
? 登録された時間に対してクエリ範囲を指定する?
(範囲をmillisecondsで指定する)
? 指定できるのは過去7日以内のデータのみ
もっと知りたい人はこちら
https://cloud.google.com/bigquery/table-decorators
(例) 今から1ms前~60秒前までのデータを検索?
SELECT COUNT(*) FROM ?
[dataset.access_log@-60000?1];
BigQueryの基本&Tips
28
? もっと難しい変換とか計算したいんだけど!?
という方に。
? 大丈夫です。?
UDF(User-De?ned Functions) 使えます。
? 言語はJavaScript
もっと知りたい人はこちら
https://cloud.google.com/bigquery/user-de?ned-functions
BigQueryの基本&Tips
29
? ThirdPartyToolとの連携
BigQueryの課金を減らす
30
? BigQueryの課金を減らす
BigQueryの課金を減らす
31
BigQueryでは扱うデータも大きく?
課金方法が他とは違い独特なため?
気をつけないと大変なことになります。
大変なことになった例
32
? Qiita: BigQueryで150万円溶かした人の顔
http://qiita.com/itkr/items/745d54c781badc148bb9
大変なことになった例
33
? 既存データからSELECTしたデータで新テーブルを作ろうとした
http://qiita.com/itkr/items/745d54c781badc148bb9
--allow_large_results
をつけないと、?
データ量が多い場合に
"Error: Response too
large to return in big
query
というエラーになります。
BigQueryの課金を減らす
34
? クエリでスキャンしたデータ量に対して課金
? 指定されたテーブルの全てのデータを?
スキャンして処理を行う
? = 指定したテーブルサイズで課金額が決まる
? = WHERE句は課金額に関係ない?
(検索結果が絞りこまれ数件でも課金額には関係がない)
BigQueryの課金を減らす
35
? では、どうすれば課金を
抑えることが出来るか
? ポイントは2つ
BigQueryの課金を減らす
36
? 1.列型指向データベース
BigQueryの課金を減らす
37
? 列型指向データベース
? カラムごとにデータを保持している
? 不用意なSELECT * FROM … のクエリをやめ、?
必要なカラムのみをSELECTで指定する
C1 C2 C3 C4 C5 C6 C7 C8 C9
R1
R2
R3
R4
SELECT * の時にスキャンするデータ
C1 C2 C3 C4 C5 C6 C7 C8 C9
R1
R2
R3
R4
SELECT C1,C2,C5,C8 の時に?
スキャンするデータ
BigQueryの課金を減らす
38
? 2.テーブル分割
BigQueryの課金を減らす
39
? スキャンの最小単位がテーブルなため?
テーブルを分割するのが定石
? 巨大なデータで多いケースとして?
ログデータを扱うケースが多いため、まずは日付で
分割するのが定石
? ログデータのため最近のデータほど価値が高い?
(利用頻度が多い)ケースが多い
BigQueryの課金を減らす
40
? テーブル分割 : 期間で分割したテーブルを利用する?
mydata.people20140325?
mydata.people20140326?
mydata.people20140327
BigQueryの課金を減らす
41
? テーブル分割 : 期間で分割したテーブルを利用する
? BigQueryで用意されている分割想定された関数を利用する
? TABLE_DATE_RANGE と TABLE_DATE_RANGE_STRICTの違いは?
シーケンスのなかで欠けている日次テーブルがあるときにエラーを返し
ます。
? 日別ではなく、月別で処理したいなどの時はYYYYMM01などの1日目
のデータのみを作るなどをすると楽です。
BigQueryの課金を減らす
42
? テーブル分割 : 自由なルールで分割する
? TABLE_QUERYを利用するとテーブル名に対して条件Queryを指定し
て、合致したTableを検索対象のテーブルとして処理できます。
? 例)テーブル名に oo が含まれて居て、テーブル名の長さが4以上のもの
BigQueryの課金を減らす
43
? テーブル分割 : 自由なルールで分割する
? 例)名前の先頭が "boo" で、?
その後ろに 3 個から 5 個の数字の連続が含まれているテーブルにマッチする
BigQueryの課金を減らす
44
? テーブル分割 : 自由なルールで分割する
? テーブルを個別に指定する
? BigQueryのFROM句のカンマ区切りはJoinではなく、?
Unionになっている
BigQueryの課金を減らす
45
? 課金額に気をつけるポイント?
まとめ
BigQueryの課金を減らす
46
? WHERE句での絞り込みは課金には関係ない?
関連するデータ全てをスキャンする?
(絞り込み後ではなく絞り込むために読むデータに対して課金される)
? SELECT句で指定するカラムできるだけ絞り込む?
(列指向なので油断してSelect * FROM … などにしない)
? テーブルは分割する(通常は期間で分割)?
TABLE_DATE_RANGEを使う前提で作ると便利
? 全期間で複数回のクエリを実行して分析したいときは?
BigQueryを諦めて別の仕組みを利用することを考える?
(RedShift、Hadoop系のSparkやHive等、ElasticSearch)
最新Update情報
47
? 米国時間12/15 Updateほやほや
? 監視ログ機能の追加(Beta) ?
https://cloud.google.com/logging/docs/audit/
? クォータをユーザが設定可能に!(使いすぎ防止)
? Query Explainグラフィカルツール
? などなど
まとめ
48
? BigQueryまとめ
まとめ
49
? 更新は出来ない!分析用途で利用!
? デカイデータに対して少ないクエリ回数で?
利用出来る時に使える(データ量に対して激安!)?
(クエリ回数が多い時はまずRedShiftを検討)
? フルスキャンに気をつけろ!(トロケる)
? Index無し。あらゆる項目を軸に分析出来る!
? どれだけデカくなっても早い!!!
? Google的、富豪的解決方法!
まとめ
50
明日から
BigQueryはGoogleの発想だから
出来たんだよね!
?
とドヤ顔で言ってやりましょう
ありがとうございました
51
ご清聴ありがとうございました

More Related Content

これで叠颈驳蚕耻别谤测をドヤ颜で语れる!叠颈驳蚕耻别谤测の基本