Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

これでBigQueryをドヤ顔で語れる!BigQueryの基本

24,934 views

Published on

社内勉強会で発表するのに使った資料です。

google big queryが基本的な使い方が全て分かるようにまとめたもの
ただし、続きはWebで(公式ドキュメントで)

Published in: Technology

これでBigQueryをドヤ顔で語れる!BigQueryの基本

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

×