🆕

PARTITIONS ビューを使ったクエリで Google BigQuery のデータセットサイズを算出する

2021/08/26に公開

Google Cloud BigQuery の料金は大きくデータを保存することによる課金とクエリを発行する課金に分かれます。クエリを打つ時は、おおよそどれくらいのデータを読み出すかプレビューできますし、課金が嫌ならクエリ発行頻度をおさえるなどコントロールできます。

一方気になるのは保存することによる課金で、様々なデータソースからBigQueryに連携していると、どれくらい保存しているか確認したくなるものです。

いろいろな算出方法がある

同じように考えている人は多く、皆様様々な方法で算出しています。

https://www.techblogchan.com/entry/2019/10/15/110000

課金額は ストレージのティアによっても変わるので、それを考慮している方もいらっしゃいました。

BigQueryでDatasetのデータ容量サイズ確認と費用計算方法

もちろんこの方法でもOKなのですが、Google のドキュメントに PARTITIONSビューを利用した方法があったので試してみました。

PARTITIONSビュー によるデータセットサイズの算出

https://cloud.google.com/bigquery/docs/information-schema-tables?hl=ja#partitions_view

早速ドキュメントに記載されているクエリを叩いてみます。パブリックデータに対するクエリなので、どなたでも実行できるはずです。バイト数が少し見にくいのでGBにしています。

SELECT storage_tier, SUM(total_billable_bytes) / 1000000000 billable_GBs
FROM `bigquery-public-data.crypto_bitcoin.INFORMATION_SCHEMA.PARTITIONS`
GROUP BY storage_tier

結果は以下のようになりました。

nginx アクセスログ結果に対して

ロードバランサーの nginx ログは Cloud Logging に出力され、さらに Cloud Logging はログルーターで BigQuery に連携できます。

https://cloud.google.com/logging/docs/export?hl=ja

この溜め込んでいるアクセスログに対してもサイズチェックを実行してみました。

SELECT storage_tier, SUM(total_billable_bytes) / 1000000000 billable_GBs
FROM `super_project.access_log.INFORMATION_SCHEMA.PARTITIONS`
GROUP BY storage_tier

7.5GBほどでした。課金額の参考のため、と考えるとstorage_tierで GROUP BY できるのはありがたいですね。サイズを算出する機会があったら、PARTITIONS ビューを利用した方法でも試してみてください。

Discussion