[Cloud OnAir] Cloud Run & Firestore で、実践アジャイル開発 2020年6月25日 放送
Google Cloud ベストプラクティス:Google BigQuery 編 - 03 : パフォーマンスとコストの最適化
1. Confidential & Proprietary
Google Cloud ベストプラクティス
Google BigQueryBest Practices and Performance Optimization /
Cost Optimization
Google Cloud カスタマーエンジニア
2. Confidential & Proprietary
Agenda
● Best Practices and Performance
Optimization
● Cost Optimization
Google Cloud ベストプラクティス Google BigQuery
※このスライドは 2017 年 12 月時点の情報に基づき作成しています。最新情報は Google Cloud Platform のドキュメントをご参照ください。
https://cloud.google.com/docs/
5. Google Cloud ベストプラクティス Google BigQuery
Confidential & Proprietary
id name cost date
SELECT id, cost FROM table
SELECT GKGRECORDID FROM
`gdelt-bq.hathitrustbooks.1800`
SELECT * FROM
`gdelt-bq.hathitrustbooks.1800`
必要なカラムのみクエリする
● BigQuery はカラム指向ストレージ
● 指定されたカラムは上から下までフルスキャンされる
● パフォーマンス、コストの観点から必要なカラムのみクエリをする
6. Google Cloud ベストプラクティス Google BigQuery
Confidential & Proprietary
※ 分割テーブル
#standardSQL
SELECT
*
FROM
mydataset.partitioned_table
WHERE
_PARTITIONTIME BETWEEN
TIMESTAMP_TRUNC(TIMESTAMP_SUB(CURRENT_TIMES
TAMP(), INTERVAL 7 * 24 HOUR),DAY)
AND
TIMESTAMP_TRUNC(CURRENT_TIMESTAMP(),DAY);
#Caluculate the cost for today
#standardSQL
SELECT service.description, SUM(cost)
FROM
`yutah-playground.billing_dashboard.gcp_billi
ng_export_v1_00AFE2_6C3561_890001`
WHERE
_PARTITIONTIME = TIMESTAMP("2017-10-13")
GROUP BY service.id, service.description
LIMIT
1000
分割テーブル (partitioned table)
● テーブルを パーティション に分割する
● 2017年10月 現在, データが挿入された日付で分割がされる 日付分割 のみ対応
● 最新のデータ(7日間)のみ取得するビューを作るなど、スキャン対象データを絞れる
10. Google Cloud ベストプラクティス Google BigQuery
Confidential & Proprietary
$bq query --destination_table=’mydataset.happyhalloween’
“SELECT id FROM `bigquery-public-data.hacker_news.comments`
LIMIT 1000”
OR
中間テーブルの作成とビュー
11. Google Cloud ベストプラクティス Google BigQuery
Confidential & Proprietary
Dataset C
Dataset B
● ビューはマテリアルビューではなく通常ビュー
○ 開くたびに裏ではクエリが走る
○ 中間テーブルと使い分けることが重要
○ (最後のユーザが見る部分のみ Viewを利用し、その他
は中間テーブルを利用する、等 )
● Authorized view を利用して、権限分離にも利用できる
参考: ビューの使用
BigQuery で承認済みビューを作成する
Dataset A
View
View
必要な Column のみ
SELECT,
必要な raw のみ WHERE し
VIEW にアクセス権を付与
Analyst
Group B
Analyst
Group C
中間テーブルの作成とビュー
13. Google Cloud ベストプラクティス Google BigQuery
Confidential & Proprietary
中間テーブルの作成とビュー
● 参考: テーブルの生成依存関係を管理する
● Google Cloud Platform - Big Data & Machine
Learning Blog: How to aggregate data for
BigQuery using Apache Airflow
14. Google Cloud ベストプラクティス Google BigQuery
Confidential & Proprietary
14
Google BigQuery 注意事項
● responseTooLarge 応答結果が大きすぎる
○ 圧縮後128MBまで -> 別テーブルに出力する
● resourcesExceeded リソースが足りな
○ GROUP EACH BY, EACH JOIN … ON
● quotaExceeded クォータを超過してい
○ クォータに注意
● billingTierLimitExceeded HighCompute クエリを実行しようとしている
○ maximumBillingTier を指定する
36. Google Cloud ベストプラクティス Google BigQuery
Confidential & Proprietary
36
https://cloud.google.com/bigquery/pricing
BigQuery - Storage
[Unit: per GB per month]
GCS
[Unit: per GB per month]
BigQuery: Storage
GCS: Nealine
$0.02 $0.01
BigQuery: Long Term Storage
GCS: Coldline
$0.01 $0.007
bq extract --compression=GZIP [DATASET].[TABLE_NAME]
gs://[BUCKET_NAME]/[FILENAME] ※料金はUSリージョン
利用料金の節約 - ストレージ
古いデータを Google Cloud Storage (GCS) へエクスポート
● GCS へのエクスポート時に gzip 圧縮を指定することも検討
37. 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