はじめに
BigQueryに存在するデータセットのデータ容量を算出する方法について、
公式ドキュメントで詳細が見つかりにくかったため、この記事ではその具体的な方法を紹介します。
1. __TABLES__
メタテーブルの概要
BigQueryでは、__TABLES__
というメタテーブルを使うことで、各テーブルのデータ容量やレコード数を簡単に把握することができます。
__TABLES__
メタテーブルには、以下のようなカラムが含まれています。
SELECT
*
FROM
`プロジェクト名.データセット名.__TABLES__`
-
table_id
:テーブル名 -
creation_time
:テーブル作成時のタイムスタンプ -
last_modified_time
:最後に変更されたタイムスタンプ -
row_count
:テーブル内の総レコード数 -
size_bytes
:テーブルのサイズ(バイト単位) -
type
:テーブルの種類
(通常は "TABLE" だが、ビューの場合は "VIEW" となる) -
table_reference.project_id
:プロジェクトID -
table_reference.dataset_id
:データセットID
特に重要なのはsize_bytes
とrow_count
で、これらを利用してテーブルの容量やレコード数を調べることができます。
※size_bytes
はバイト単位であるため、必要に応じてクエリ実行時にMBやGBに変換してください。
※VIEW
には物理的なデータが存在しないため、size_bytes
は「0」と表示されます。
2.データ容量とレコード数を取得するクエリの実例
例1:データセットの総容量をMB単位で調べるクエリ
SELECT
table_id,
SUM(size_bytes) / 1000000 AS MBs
FROM
`プロジェクト名.データセット名.__TABLES__`
GROUP BY
table_id;
-
SUM(size_bytes)
:各テーブルのサイズをバイト単位で合計する -
/ 1000000
:合計サイズをバイトからメガバイトに変換する
1メガバイトは1,000,000バイトなので、この計算でMB単位のサイズを取得できる。
実行結果例:
| table_id | MBs |
|-----------------|-----------|
| users | 12.34 |
| transactions | 456.78 |
| logs | 1234.56 |
この結果から、users
テーブルは12.34MB、transactions
テーブルは456.78MBのデータが含まれていることが分かります。
補足
下記クエリでは、小数点以下2桁までのMBサイズを表示します。
サイズが非常に大きい場合や、小数点以下の精度が必要な場合には、クエリ内でROUND関数を使って小数点以下の桁数を調整することもできます。
SELECT
table_id,
ROUND(SUM(size_bytes) / 1000000, 2) AS MBs
FROM
`プロジェクト名.データセット名.__TABLES__`
GROUP BY
table_id;
例2:総レコード数を調べるクエリ
SELECT
table_id,
SUM(row_count) AS total_rows
FROM
`プロジェクト名.データセット名.__TABLES__`
GROUP BY
table_id;
-
SUM(row_count)
:各テーブルのレコード数を合計する
実行結果例:
| table_id | total_rows |
|-----------------|------------|
| users | 100000 |
| transactions | 500000 |
| logs | 1200000 |
この結果から、users
テーブルは100,000件のレコード、transactions
テーブルは500,000件のレコードが含まれていることが分かります。
3. まとめ
この記事では、BigQueryの__TABLES__
メタテーブルを使って、データセットの総容量をMB単位で確認する方法や総レコード数の算出方法を紹介しました。
データが膨大になると、ストレージのコストがかさむだけでなく、クエリのパフォーマンスにも影響を与えます。データセットの容量やレコード数を定期的に確認し、適切に管理することも大切なんだなと学ぶことができました。