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.

Google Cloud ベストプラクティス:Google BigQuery 編 - 02 : データ処理 / クエリ / データ抽出

2,855 views

Published on

Google Cloud ベストプラクティス
Google BigQuery 編 #02 : データ処理 / クエリ / データ抽出

Google Cloud カスタマーエンジニアによる Google Cloud 製品に関するスライドを公開します。

Published in: Engineering
  • Nice !! Download 100 % Free Ebooks, PPts, Study Notes, Novels, etc @ https://www.ThesisScientist.com
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Google Cloud ベストプラクティス:Google BigQuery 編 - 02 : データ処理 / クエリ / データ抽出

  1. 1. Confidential & Proprietary Google Cloud ベストプラクティス Google BigQueryData ingestion into BigQuery / Writing Queries in BigQuery / Data extraction and exportation from BigQuery Google Cloud カスタマーエンジニア
  2. 2. Confidential & Proprietary Agenda ● Data Ingestion into BigQuery ● Writing Queries in BigQuery ● Data extraction and exportation from BigQuery Google Cloud ベストプラクティス Google BigQuery ※このスライドは 2017 年 12 月時点の情報に基づき作成しています。最新情報は Google Cloud Platform のドキュメントをご参照ください。  https://cloud.google.com/docs/
  3. 3. Confidential & Proprietary Google Cloud ベストプラクティス Google BigQuery Data Ingestion into BigQuery
  4. 4. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary Cloud Logs Google App Engine Google Analytics Premium Cloud Pub/Sub BigQuery Storage (tables) Cloud Bigtable (NoSQL) Cloud Storage (files) BigQuery Analytics (SQL) Capture Store Analyze Batch Cloud DataStore Process Stream Cloud Monitoring Cloud Bigtable Real time analytics and Alerts Cloud Dataflow Cloud Dataproc Cloud Dataproc In some cases data can end up in storage and then again be processed or enriched by Cloud Dataflow GCP におけるデータ処理
  5. 5. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary <POST> データソース ● Google Cloud Storage (GCS) ● アップロード (POST request) ● Google Cloud Datastore のバックアップ ● Google Analytics Premium ● Stackdriver Logging からのログエクスポート ● Firebase
  6. 6. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary データの取り込み方法 Data Loading ● データをジョブでまとめて取り込む Streaming Insert ● リアルタイムに近い方式でデータを取り込む 共通のポイント ● 両者ともクエリ実行環境とはリソース分離 ● データ取り込み/クエリ実行のパフォーマンスは互いに影響しない
  7. 7. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary jobid データを一括で取り込む Data Loading ● 実行自体は無料 ○ (データのストレージには課金有 )
  8. 8. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary データをストリーム Streaming Insert ● 小規模かつ頻繁なテーブル更新は Data Loadingには向かない ● すぐにデータを見たいという場合も同様 ● 有料 ($0.05/GB*month) ● Fluentdなどを利用して実装するのが楽 ● データ増加してもジョブが終わらない、という心配がなくなる
  9. 9. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary [Consistency|Availability|Speed|Cost] はトレードオフ: Consistency Availability Speed Cost Data Loading スループット最適化 強整合性 Load Job が完了し たらすぐ使える Job が完了しない と読み込めない Free Streaming Insert レイテンシー最適化 結果整合性 Insert から分析ま で数 ms 秒, Export や Copy まで Max 90min リアルタイム $0.05/GB *month データ取り込み方法の選択
  10. 10. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary Cloud Pub/Sub 大規模データの取り込み Data Loading ● Google Cloud Storage (GCS) を経由してロード ○ BigQuery の Loading Jobは Upload と Table への挿入の2要素 ○ どちらかが失敗すると Upload からやり直しになる ○ そのため GCS を経由することが推奨される ○ 同リージョンの GCS - BigQuery のロードは Upload よりも非常に高速 Streaming Insert ● 10 万行/秒 * Project, 1 万行 / 秒 * Tableのクオータを超えないよう設計 ○ 超えそうな場合は担当エンジニアに相談 ○ Cloud Pub/Sub を利用してキューイング、スロットリング ○ リアルタイムに近い方式でデータを取り込む https://cloud.google.com/bigquery/quota-policy
  11. 11. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary 大規模データの取り込み - クオータ 変更できないクオータはアーキテクチャ設計で対応 ● ロードジョブの最大サイズ : ○ ファイルを分割, or 制限のより大きな形式に変更 ○ Avro: block size で 16MB, CSV: row と cell で 2MB ● すべてのテーブルクオータ : Table を Shard ○ Streaming insert ■ maximum rows per second per table, maximum bytes per second per table ○ Load jobs ■ maximum number of loads per table per day https://cloud.google.com/bigquery/quota-policy
  12. 12. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary 大規模データの取り込み - クオータ https://cloud.google.com/bigquery/quota-policy クオータ変更リクエスト : API Managerより実施
  13. 13. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary Cloud Dataflow データの加工 Pub/Sub等からのロード, ETL処理を行いたい ● Cloud Dataflow , Cloud Dataprep を利用 Cloud Dataflow ● Batch, Streaming 処理を Apache Beam のコードで記述可能なマネージドサービス ● Cloud PubSub より BigQuery への挿入を行うためにも利用できる ● BigQuery UDF で並列実行できる数にヒットする場合にも検討 Cloud Dataprep ● GUI で利用できるデータ加工ツール ● レシピを作成し、 Engine として Dataflow がバッチで動作する
  14. 14. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary Compute App Engine Container Engine Compute Engine BigQuery Stream Insert Data Load Stackdriver Logging Storage and Databases Cloud Storage Cloud Datastore Cloud Pub/Sub Cloud Dataflow データ取り込みの実装 (GCP 内部)
  15. 15. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary On Premise Other Cloud Service BigQuery Stream Insert Data Load Logging 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 データ取り込みの実装 (GCP 外部)
  16. 16. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary データの取り込み方法の選択 - まとめ Data Loading ● リアルタイム分析をしないデータに適用 ● バッチでの分析データ更新 /追加を許容 ● ジョブの処理に時間がかかるようになったらどうするかを考慮する ● クリティカルなロードには Federated Query (後述) によるロードも検討 Streaming Insert ● ジョブが回しきれない規模 /リアルタイム分析が必要なデータに適用 ● 結果整合性であることを考慮する ● データ量爆発に備え Pub/Sub を緩衝材として利用することも考慮する どちらの場合も制限があるので確認をしておく https://cloud.google.com/bigquery/quota-policy
  17. 17. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary {JSON} BigQuery ドキュメント - 読み込み用のデータを準備する CSV データフォーマット データフォーマット ● CSV ● JSON ● Apache Avro [Beta] 圧縮の有無 ● 非圧縮 ● gzip [Avroは対象外] エンコードについての制約もあるので確認する
  18. 18. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary データフォーマットのベストプラクティス ロードの高速化: ● Avro はロードが 10 倍程度高速 ● CSV の場合は Encode を UTF-8 にする ○ ISO-8859-1 などの場合、BigQuery で変換処理が行われるので遅くなる ● 非圧縮でロードする ○ gzip はロードパフォーマンスが落ちる
  19. 19. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary マスタデータの更新のベストプラクティス 3 つの選択肢 ● BigQuery のテーブルを delete して再度ロード ○ データ更新が多い際に利用 ● Data Loading を利用して追加 ○ WRITE_APPEND モードで、追記してロード ○ 更新されたマスタのレコードを timestamp 付きで Loading ○ Timestamp が最新のマスタを表示する View を作る ● DML で更新 ○ DML の Quota にかからないか確認して設計
  20. 20. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary Direct query Paying it Forward — How BigQuery’s Data Ingest Breaks Tech Norms 外部データソースの解析 フェデレーション データソース ● BigQuery 自身のストレージではない場所に格納されたデータをクエリできる機能 ● データ取り込みの必要なく手軽に分析 ● ロードの代わりに高速な有料ロード としても利用可 ● 対象ソース ○ Google Cloud Storage ○ Google Drive ○ Cloud BigTable ● 制限 ○ クエリ実行速度はネイティブより遅い ○ クエリ実行中にデータの整合性が保証されない 参考: Creating and Querying Federated Data Sources
  21. 21. Confidential & Proprietary Google Cloud ベストプラクティス Google BigQuery Writing Queries in BigQuery
  22. 22. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary BigQuery におけるクエリ Legacy SQL ● SELECT のみサポート ● ビッグデータ解析のために独自に拡張 Standard SQL ( 2016 年 9 月 GA, 新機能追加のため推奨 ) ● SQL 2011準拠 ● DML (Data Manipulation Language) 対応
  23. 23. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary ● SELECT のみ ● SQL ライクな構文 (ビッグデータを扱うために拡張 ) ● クエリ対象のテーブル指定 ○ カンマによる UNION ○ テーブルワイルドカード関数 ● ネストテーブル ● 集計関数 ○ テーブル集計、グループ集計、スコープ集計 ● 日付/時刻関数 ● IP 関数, URL 関数 ● JSON 関数 / 正規表現関数 ● 文字列関数 ● ウィンドウ関数 Legacy SQLの特徴
  24. 24. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary Legacy SQL - SQLライクな構文 ● BigQuery クエリ リファレンス ○ 英語版、日本語版
  25. 25. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary Standard SQL ● SQL 2011 準拠 ● DML: Update, Delete, Insert をサポート ○ DMLにはクオータあり ○ Max UPDATE/DELETE /day /table : 48 ○ Max UPDATE/DELETE / day /project: 500 ○ Max INSERT / day / table: 1000 ○ Max INSERT / day / project: 10,000 ● Standard SQL クエリ リファレンス
  26. 26. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary SELECT lower(word) as word, word_count AS frequency, corpus FROM [publicdata:samples.shakespeare] WHERE corpus CONTAINS “king” and LENGTH(word) > 5 ORDER BY frequency DESC SELECT lower(word) as word, word_count AS frequency, corpus FROM `publicdata.samples.shakespeare` WHERE corpus LIKE ‘%king%’ and LENGTH(word) > 5 ORDER BY frequency DESC; Query Examples - Filtering Standard SQL BigQuery SQL (Legacy)
  27. 27. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary SELECT emp.Name AS EMPLOYEE, dep.Name AS DEPARTMENT FROM EMPLOYEE emp, DEPARTMENT dep WHERE emp.dept_id = dep.dept_id ORDER BY emp.NAME SELECT emp.Name AS EMPLOYEE, dep.Name AS DEPARTMENT FROM [myproject:mycompany.EMPLOYEE] as emp JOIN [myproject:mycompany.DEPARTMENT] as dep ON emp.dept_id = dep.dept_id ORDER BY EMPLOYEE Standard SQL BigQuery SQL (Legacy) Note: このクエリ構造はテーブル参照を除きANSI SQL syntaxに似ています Query Examples - Joins
  28. 28. Confidential & Proprietary Google Cloud ベストプラクティス Google BigQuery ● JOIN は 2 つのテーブルを指定して、 1 つ目のテーブルと 2 つ目のテーブルのすべての行のマッチしま す ● ON 句が必要です ( CROSS JOINを除く ) ● BigQuery は INNER, [FULL|RIGHT|LEFT] OUTER と CROSS JOIN をサポートします。 デフォルトは INNER です SELECT … FROM DATASET.TABLE1 [INNER|[FULL|RIGHT|LEFT] OUTER|CROSS] JOIN DATASET.TABLE2 [ON join_condition_1 [... AND join_condition_n] SELECT FROM - Joins
  29. 29. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary SELECT DISTINCT dept_id FROM ( SELECT dept_id FROM EMPLOYEE UNION ALL SELECT dept_id FROM DEPARTMENT) SELECT dept_id FROM (SELECT dept_id FROM mycompany.EMPLOYEE), (SELECT dept_id FROM mycompany.DEPARTMENT) GROUP BY dept_id Query Examples - Unions Standard SQL BigQuery SQL (Legacy)
  30. 30. Confidential & Proprietary Google Cloud ベストプラクティス Google BigQuery ● 出産した年齢が最も高い母親を探す; state, year, と ageを表示 SELECT state, source_year AS year, mother_age AS age FROM `publicdata.samples.natality` ORDER BY age DESC LIMIT 1 ● 最新年の州の略称で集計した出生数で検索する SELECT state, source_year AS year, COUNT(*) as number FROM `publicdata.samples.natality` WHERE state IS NOT NULL AND year IS NOT NULL GROUP BY state, year ORDER BY year DESC LIMIT 5 BigQuery Example- Limit
  31. 31. Confidential & Proprietary Google Cloud ベストプラクティス Google BigQuery ● 公的な天候データから、月ごとのパリの Hot days (> 83 degrees) をカウントする SELECT year, month, count(round(mean_temp)) AS num_hot_days FROM `publicdata.samples.gsod` WHERE station_number = 071490 AND mean_temp > 83 GROUP BY year, month ORDER BY num_hot_days DESC, month DESC LIMIT 10 More Examples
  32. 32. Confidential & Proprietary Google Cloud ベストプラクティス Google BigQuery ● bq command line tool を使い、ロンドン・ヒースロー空港 (station 037720)の最新 10 日で雷雨の日を見つける > bq query “SELECT year, month, day, thunder, rain FROM `publicdata.samples.gsod` WHERE thunder = TRUE AND rain = TRUE AND station_number = 037720 ORDER BY year DESC, month DESC, day DESC LIMIT 10” More Examples
  33. 33. Confidential & Proprietary Google Cloud ベストプラクティス Google BigQuery ● 複雑なプロセスの場合には sub-select 分を使ったほうが簡単なときがある ● sub-select 句の結果は、外部の SQL Select 句のソーステーブルとして使われる SELECT … FROM ( SELECT … FROM .. ) SELECT FROM – Sub-Select
  34. 34. Confidential & Proprietary Google Cloud ベストプラクティス Google BigQuery ● シンプルなクエリを使うと複合クエリを使える ● Joins の Sub-Select SELECT … FROM [dataset.table1] as T1 JOIN [dataset.table2] as T2 ON T1.x = T2.x JOIN (SELECT … FROM dataset.table3) as T3 ON T1.y = T3.y WHERE ... SELECT FROM – Sub-Select Join
  35. 35. Confidential & Proprietary Google Cloud ベストプラクティス Google BigQuery ● 他の SQL ベースのシステムとは違い、BigQuery は Join ではなくテーブルの Union をカンマで示します。 ● 同様のスキーマを持つ複数テーブルへのクエリ ● Join と Union SELECT … FROM [dataset.table1],[dataset.table2],[dataset.table3] AS T1 JOIN (SELECT … FROM dataset.table4) as T4 ON T1.y = T4.y WHERE ... SELECT FROM – Union
  36. 36. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary ● Dry Run によりスキャンサイズが確認可能 (Web UI | bq コマンド | API) ● エラーも事前検出出来る Click Query Tips
  37. 37. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary ● BigQuery Mate (3rd party Chrome Extention) で更に便利に ○ スキャン費用概算表示 ○ デフォルト SQL の設定 ○ SQL の replace ○ パラメータ設定 ○ 等 Query Tips
  38. 38. Confidential & Proprietary Google Cloud ベストプラクティス Google BigQuery Data extraction and exportation from BigQuery
  39. 39. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary 抽出の方法: ● データをエクスポートする目的 ○ 3rd パーティツールを使うため ○ スナップショット ○ バックアップ ● エクスポートに使うもの ○ WebUI ○ CLI ○ REST API BigQuery からのデータ抽出
  40. 40. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary 抽出の方法: ● 他のテーブルやGoogle Cloud Storage へのエクスポート ● 圧縮または、非圧縮CSV / JSON / AVRO ● 複数のテーブルまたは複数のファイルへのシャード BigQuery からのデータ抽出
  41. 41. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary Configuration Options 2 つの観点: デフォルト: ● デフォルトはCSV. ● ネストされたフィールドまたは繰り返しフィー ルドを持つテーブルは、CSVとしてエクス ポートできません。 ● デフォルトの圧縮は NONE. ● CSV ● JSON ● Avro* ● GZIP ● NONE 圧縮 出力Format *Avro フォーマットは GZIP 圧縮できません
  42. 42. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary テキサスで”J”で始まる人気の名前トップ100 BigQuery からのデータ抽出 - 他のテーブルへのエクスポート
  43. 43. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary テキサスで”J”で始まる人気の名前トップ100 BigQuery からのデータ抽出 - 他のテーブルへのエクスポート
  44. 44. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary BigQuery からのデータ抽出 - Cloud Storage へのエクスポート テーブルの GCS へのエクスポート
  45. 45. Google Cloud ベストプラクティス Google BigQuery Confidential & Proprietary BigQuery からのデータ抽出 - Cloud Storage へのエクスポート テーブルの GCS へのエクスポート
  46. 46. Google BigQuery Google Cloud ベストプラクティス Thank you 1 : Introduction / BigQuery Organization / Exploring and Interacting with BigQuery 2 : Data ingestion into BigQuery / Writing Queries in BigQuery / Data extraction and exportation from BigQuery 3 : Best Practices and Performance Optimization / Cost Optimization

×