🙌

BigQuery 分析クエリ一発でコスト最適化余地確認

2025/02/14に公開

はじめに

BigQueryにかかるコストが気になっているけど、手間のかかる最適化をする余裕はないという方はいるかと思います。

この記事では、BigQueryでこのクエリを一発実行すれば簡単な設定変更のみでコスト最適化余地があるのかないのか判断できるよ、という内容を紹介します。

BigQueryの料金はコンピューティングとストレージにかかり、それぞれ料金体系は・・という記事はたくさんありますのでそちらをご覧ください。
コスト最適化も含め参考になる記事がたくさんあります。
https://blog.g-gen.co.jp/entry/bigquery-storage-pricing-explained
https://tech.plaid.co.jp/bigquery_slot_optimization_in_editions

結論

こちらのクエリを実行してください。

SELECT
  table_schema,
  SUM(active_logical_bytes / 1024 / 1024 / 1024) AS total_active_logical_bytes,
  SUM(active_physical_bytes / 1024 / 1024 / 1024) AS total_active_physical_bytes,
  SUM(long_term_logical_bytes / 1024 / 1024 / 1024) AS total_long_term_logical_bytes,
  SUM(long_term_physical_bytes / 1024 / 1024 / 1024) AS total_long_term_physical_bytes,
  SUM(fail_safe_physical_bytes / 1024 / 1024 / 1024) AS total_fail_safe_physical_bytes,
  SUM((active_logical_bytes / 1024 / 1024 / 1024) * 0.02 + ((long_term_logical_bytes  / 1024 / 1024 / 1024) * 0.01)) AS logical_billing_model,
  SUM((active_physical_bytes / 1024 / 1024 / 1024) * 0.04 + ((long_term_physical_bytes / 1024 / 1024 / 1024) * 0.02) + ((fail_safe_physical_bytes / 1024 / 1024 / 1024) * 0.04)) AS physical_billing_model
FROM
  `region-us`.INFORMATION_SCHEMA.TABLE_STORAGE
GROUP BY
  table_schema
ORDER BY
  total_active_physical_bytes DESC;

こんな表が取得できます。

logical_billing_model、physical_billing_modelの欄が、GoogleCloudが用意している各ストレージ課金モデルの料金です。

データセットのストレージの課金モデルを確認し、データセット毎にこの料金が低い方を選択するのみで、ストレージ課金モデルの選択による費用の最適化が完了します。

※ちなみにデータセット毎の課金モデルはこのクエリで一覧が取得できます。

SELECT 
    schema_name AS dataset_name, 
    option_value AS storage_billing_model
FROM 
    `region-us.INFORMATION_SCHEMA.SCHEMATA_OPTIONS`
WHERE 
    option_name = 'storage_billing_model';

解説

BigQueryでは、データの保存にかかるコストが 「論理ストレージ(Logical Storage)」「物理ストレージ(Physical Storage)」 の2種類に分かれています。それぞれの課金方式や計算方法を理解することで、コスト最適化につなげることができます。
https://blog.g-gen.co.jp/entry/bigquery-storage-pricing-explained

ストレージ料金の計算に必要な情報

BigQueryのストレージ料金を計算するには、各テーブルのストレージサイズを把握する必要があります。そのための情報は、BigQueryが提供する INFORMATION_SCHEMA.TABLE_STORAGE ビューを使うことで取得できます。

ビューのドキュメントはこちら
https://cloud.google.com/bigquery/docs/information-schema-intro?hl=ja
https://cloud.google.com/bigquery/docs/information-schema-table-storage?hl=ja

費用の計算に必要な値はそれぞれ以下です。

表はこちらのドキュメントから抜粋
https://cloud.google.com/bigquery/docs/time-travel?hl=ja

冒頭のクエリを実行することでデータセット毎にそれぞれ必要な値を算出し、各ストレージの課金モデルの最終的な合計料金が出力されます。

こちらのドキュメントから抜粋
https://cloud.google.com/bigquery/docs/information-schema-table-storage?hl=ja

補足

タイムトラベルやフェースセーフがそれぞれどんな役割のストレージであるのかはこちらに記載があります。
https://cloud.google.com/bigquery/docs/time-travel?hl=ja#billing

物理ストレージによる課金を選択した場合、タイムトラベルやフェールセーフに課金が発生します。
特にバックアップ不要な場合はこちらを機能を無効にしたいと思うかもしれません。

しかし、タイムトラベルは最低2日の設定、フェールセーフに関しては無効化できません。
そのため、更新や削除が多いデータセットには物理ストレージによる課金は向かないかもしれません。

We're Hiring!

DELTAではチームの一員になっていただける仲間を募集中です!
下記フォームよりお気軽にご連絡ください!

https://docs.google.com/forms/d/e/1FAIpQLSfQuWNU1il5lq2rVdICM0tSK_jTsjqwc52LYEwUxBq7_ImtrQ/viewform

Discussion