1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

BigQueryの裏技!__TABLES__メタテーブルでデータ容量とレコード数を簡単把握

Posted at

はじめに

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_bytesrow_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単位で確認する方法や総レコード数の算出方法を紹介しました。

データが膨大になると、ストレージのコストがかさむだけでなく、クエリのパフォーマンスにも影響を与えます。データセットの容量やレコード数を定期的に確認し、適切に管理することも大切なんだなと学ぶことができました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?