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

1,389 views

Published on

2018/10/19
bq_sushi_fukuoka#1
の資料です。

Published in: Technology
  • Be the first to comment

普通に使える?BigQuery

  1. 1. 普通に使える?BigQuery #bq_sushi_fukuoka 宮田 和三郎 2018/10/19
  2. 2. 念願のbq_sushi@福岡 持ち時間は30分 2
  3. 3. 30分で無から1,000億件のレコードを生成し、1,000億件 のレコードにフルスキャンでクエリを(自腹で)投げてみま す。 とりあえず、超高速性能の再確認 3
  4. 4. 小売業(会員制/実店舗)の売上データを想定 1,096 × 100 × 1,000 × 1,000 日(3年) 店舗 人(顧客数) 商品数 109,600,000,000 レコード 4
  5. 5. 小売業(会員制/実店舗)の売上データを想定 1,096 × 100 × 1,000 × 1,000 日(3年) 店舗 人(顧客数) 商品数 109,600,000,000 レコード SQL1 SQL2 SQL3 5
  6. 6. SQL1 #standardSQL CREATE OR REPLACE TABLE demo.bigdata_temp01 AS WITH t1 AS ( SELECT days FROM UNNEST(generate_date_array('2018-01-01', '2020-12-31')) as days ), t2 AS ( SELECT CONCAT("店舗",format("%04d", n)) as tenpo FROM UNNEST(GENERATE_ARRAY(1, 100)) AS n ) SELECT days,tenpo FROM t1,t2 ; CREATE SELECTでテーブル作成 WITHが使用可能 generate_XXで配列作成し、UNNESTで各要素を1行に変換 6
  7. 7. SQL2 #standardSQL CREATE OR REPLACE TABLE demo.bigdata_temp02 AS WITH t3 AS ( SELECT CONCAT("顧客",format("%04d", n)) as customer FROM UNNEST(GENERATE_ARRAY(1, 1000)) AS n ) SELECT days,tenpo,customer FROM demo.bigdata_temp01,t3 ; 7
  8. 8. SQL3 #standardSQL CREATE OR REPLACE TABLE demo.bigdata AS WITH t4 AS ( SELECT CONCAT("商品",format("%04d", n)) as syohin FROM UNNEST(GENERATE_ARRAY(1, 1000)) AS n ) SELECT days,tenpo,customer,syohin,CAST(rand() * 1000 AS INT64) uriage FROM demo.bigdata_temp02,t4 ; ランダムに売上1,000億件分のデータ生成 8
  9. 9. 9
  10. 10. 普通とは何?という話ですが、ここでは、一般的によく使 用されているRDBMS(SQL)を使用した事があれば、特 別なスキルがなくともBigQueryを使用できるようになっ たという事をお話をしたいと思います。 ここから本題 10
  11. 11. 所属:カホエンタープライズ ◆自己紹介 仕事:企業におけるデータ活用支援 名前:宮田 和三郎 経歴:主にデータ分析周り(エンジニア/PM/コンサル)   :DWH/ETL/データプレパレーション/BI/可視化/ 11
  12. 12. これは速い。速すぎる。Googleすげー。 初めてBigQueryを触り始めた2015年 しかし、Googleの謎技術、特殊なスキルがないと使えな いのでは>< ◆BQとの出会い 億単位のレコード数を全ナメして数秒 12
  13. 13. ◆やりたかった事 13 SQL SQL SQL LOAD LOAD BigQuery上でSQLを使ってデータのクレンジングや、そこそこ 複雑(計算結果を元に計算を行うよう)な計算 ここがBigQuery
  14. 14. ● DELETE,UPDATE出来ない問題 ● 小数点計算で誤差発生問題 ● 全てフルスキャン問題 ● 海外リージョン問題 ● SQLでCreate、Dropが出来ない問題 ◆2015年当時の課題 14
  15. 15. ◆DELETE,UPDATE出来ない問題 SELECTも微妙に知っているSQLと違う。 INSERTやDELETEやUPDATE出来ない。 15 →日付単位でテーブルを作成して、処理を行うたびに毎回テー ブル再作成していた。
  16. 16. ◆解決 2016年:標準SQL(DML)対応 ※SQL 2011に準拠(実行回数など制限あり) 16 参考:SQLおじさん(自称)がBigQueryのStandard SQLを使ってみた
  17. 17. ◆小数点計算で誤差発生問題 浮動小数点数型(FLOAT)しかないので少数含む数 字の正確な演算を行えない。 17 →一度整数にして計算した後、少数に戻す。 →誤差を許容する(諦める)。
  18. 18. ◆解決 2018年:NUMERIC型対応 18
  19. 19. ◆全てフルスキャン問題 インデックス、パーティションがない。 フルスキャンとなってしまうので、不要な範囲までス キャンしてしまいコスト増 →日付別にテーブルを作成し、複数テーブルに対してのク エリ(TABLE_DATE_RANGE関数)で対応 19
  20. 20. ◆解決 2016年:取り込み時間でのPARTITION TABLE 2018年:TIMESTAMP OR DATE型のカラムを使用     したPARTITION TABLE 2018年:CLUSTERED TABLES(Beta) 20
  21. 21. ◆海外リージョン問題 海外にデータを置く事がセキュリティポリシー上許 されない事がある。 21
  22. 22. ◆解決 2018年:東京リージョン開設 22
  23. 23. ◆SQLでCreate、Dropが出来ない問題 テーブルの作成に既存資源DDL(Create Table  SQL)の活用が出来ない。 23
  24. 24. ◆解決 2018年:DDL対応 例)Create Viewの場合 ●CREATE VIEW - 新しいビューを作成します。 ●CREATE VIEW IF NOT EXISTS - 指定したデータセット内にそのビューが存在しない場合にのみ作成します。 ●CREATE OR REPLACE VIEW - 指定したデータセット内にビューを作成し、同じ名前のビューが存在する場合は置 き換えます。 24
  25. 25. 2018年 一気に全てが解決 25
  26. 26. ここで1,000億レコード出来ているか確認 26 #standardSQL SELECT * FROM demo.__TABLES__;
  27. 27. 1,000億レコードにクエリ実行! #standardSQL SELECT tenpo ,sum(uriage) FROM demo.bigdata WHERE extract(month from days) = 3 GROUP BY 1 ; 27
  28. 28. 新機能(Beta版)の数々 ● Scheduling Queries ● BigQuery GIS ● BigQuery ML 28
  29. 29. 祝GA!BigQuery周辺サービス 29 ● Cloud Composer ● Cloud Dataprep by Trifacta ● Google Data Studio
  30. 30. Enjoy BigQuery! 30

×