TABLE_STORAGE ビュー

INFORMATION_SCHEMA.TABLE_STORAGE ビューには、テーブルとマテリアライズド ビューのストレージ使用量の現在のスナップショットが表示されます。INFORMATION_SCHEMA.TABLE_STORAGE ビューに対してクエリを実行すると、クエリの結果には現在のプロジェクトのテーブルまたはマテリアライズド ビューごとに 1 行が表示されます。INFORMATION_SCHEMA.TABLE_STORAGE ビューのデータはリアルタイムでは保持されず、通常、更新は数秒から数分遅れます。パーティションまたはテーブルの有効期限のみに起因するストレージの変更、またはデータセットのタイムトラベル期間への変更に起因するストレージの変更が INFORMATION_SCHEMA.TABLE_STORAGE ビューに反映されるまでに、最大 1 日かかる場合があります。

テーブル ストレージ ビューでは、現在のストレージの消費を簡単にモニタリングできます。また、ストレージで論理非圧縮バイト、物理圧縮バイト、タイムトラベル バイトのいずれを使用しているかの詳細も確認できます。この情報は、今後の拡張に向けた計画や、テーブルの更新パターンの把握に役立ちます。

*_BYTES 列に含まれるデータ

テーブル ストレージ ビューの *_BYTES 列には、ストレージの使用量(バイト)に関する情報が含まれています。この情報は、マテリアライズド ビューと次のタイプのテーブルのストレージ使用量を調べることで確認できます。

  • テーブルの作成と使用で説明されている方法のいずれかを使用して作成された永続テーブル。
  • セッションで作成された一時テーブル。これらのテーブルは、生成された名前(「_c018003e063d09570001ef33ae401fad6ab92a6a」など)でデータセットに配置されます。
  • 複数ステートメント クエリ(「スクリプト」)で作成された一時テーブル。これらのテーブルは、生成された名前(「_script72280c173c88442c3a7200183a50eeeaa4073719」など)でデータセットに配置されます。

クエリ結果キャッシュに保存されているデータは課金されないため、*_BYTES 列の値には含まれません。

クローンとスナップショットは、ベーステーブルが使用しているストレージとの差分を表示するのではなく、あたかも完全なテーブルであるかのように *_BYTES 列の値を表示するため、過大評価になります。請求では、ストレージ使用量のこの差分が正しく反映されます。クローンとスナップショットの作成によって保存され、課金されるデルタバイトについて詳しくは、TABLE_STORAGE_USAGE_TIMELINE ビューをご覧ください。

ストレージ課金を予測する

データセットの毎月のストレージ請求額を予測するには、データセットによって使用されるデータセット ストレージ課金モデルに応じて、このビュー内の logical 列または physical *_BYTES 列を使用できます。これはおおよその予測であり、正確な請求額は、BigQuery のストレージ課金インフラストラクチャによる使用量に基づいて計算され、Cloud Billing に表示されることに注意してください。

論理課金モデルを使用するデータセットの場合、月間ストレージ費用は、次のように予測できます。

((ACTIVE_LOGICAL_BYTES value / POW(1024, 3)) * アクティブな論理バイトの料金) + ((LONG_TERM_LOGICAL_BYTES value / POW(1024, 3)) * 長期論理バイトの料金)

テーブルの ACTIVE_LOGICAL_BYTES 値には、そのテーブルで現在使用されているアクティブなバイト数が反映されます。

物理課金モデルを使用するデータセットの場合は、ストレージ費用を次のように予測できます。

((ACTIVE_PHYSICAL_BYTES + FAIL_SAFE_PHYSICAL_BYTES value / POW(1024, 3)) * アクティブな物理バイトの料金) + ((LONG_TERM_PHYSICAL_BYTES value / POW(1024, 3)) * 長期物理バイトの料金)

テーブルの ACTIVE_PHYSICAL_BYTES 値には、そのテーブルで現在使用されているアクティブなバイト数と、そのテーブルのタイムトラベルに使用されたバイト数が反映されます。

テーブルのアクティブなバイト数のみを表示するには、ACTIVE_PHYSICAL_BYTES 値から TIME_TRAVEL_PHYSICAL_BYTES 値を減算します。

詳細については、ストレージの料金をご覧ください。

必要なロール

INFORMATION_SCHEMA.TABLE_STORAGE ビューに対してクエリを実行するために必要な権限を取得するには、プロジェクトに対する BigQuery メタデータ閲覧者roles/bigquery.metadataViewer)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

この事前定義ロールには、INFORMATION_SCHEMA.TABLE_STORAGE ビューにクエリを実行するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

INFORMATION_SCHEMA.TABLE_STORAGE ビューにクエリを実行するには、次の権限が必要です。

  • bigquery.tables.get
  • bigquery.tables.list

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

スキーマ

INFORMATION_SCHEMA.TABLE_STORAGE ビューのスキーマは次のとおりです。

列名 データ型
PROJECT_ID STRING データセットを含むプロジェクトのプロジェクト ID。
PROJECT_NUMBER INT64 データセットを含むプロジェクトのプロジェクト番号
TABLE_CATALOG STRING データセットを含むプロジェクトのプロジェクト ID。
TABLE_SCHEMA STRING テーブルやマテリアライズド ビューを含むデータセットの名前(datasetId とも呼ばれる)
TABLE_NAME STRING テーブルまたはマテリアライズド ビューの名前(tableId とも呼ばれる)
CREATION_TIME TIMESTAMP テーブルの作成時刻。
TOTAL_ROWS INT64 テーブルまたはマテリアライズド ビューの行の総数
TOTAL_PARTITIONS INT64 テーブルまたはマテリアライズド ビューに存在するパーティションの数。パーティション分割されていないテーブルは 0 を返します。
TOTAL_LOGICAL_BYTES INT64 テーブルまたはマテリアライズド ビューの論理(非圧縮)バイトの合計数
ACTIVE_LOGICAL_BYTES INT64 作成後 90 日未満の論理(非圧縮)バイト数。
LONG_TERM_LOGICAL_BYTES INT64 作成後 90 日以上経過した論理(非圧縮)バイト数。
CURRENT_PHYSICAL_BYTES INT64 テーブルの現在のストレージを表す、すべてのパーティションにわたる物理バイトの合計数。
TOTAL_PHYSICAL_BYTES INT64 ストレージに使用されている物理(圧縮)バイトの合計数。これには、アクティブ データ、長期保存データ、タイムトラベル データ(削除または変更されたデータ)のバイト数が含まれます。フェイルセーフ(タイムトラベル期間後も保持される、削除または変更されたデータ)のバイト数は含まれません。
ACTIVE_PHYSICAL_BYTES INT64 90 日未満の物理(圧縮)バイト数。これには、タイムトラベル(削除または変更されたデータ)のバイト数が含まれます。
LONG_TERM_PHYSICAL_BYTES INT64 作成後 90 日以上経過した物理(圧縮)バイト数
TIME_TRAVEL_PHYSICAL_BYTES INT64 タイムトラベル ストレージ(削除または変更されたデータ)で使用される物理(圧縮)バイト数
STORAGE_LAST_MODIFIED_TIME TIMESTAMP データがテーブルに最後に書き込まれた時刻。
DELETED BOOLEAN テーブルが削除されているかどうかを示します。
TABLE_TYPE STRING テーブルのタイプ。例: EXTERNALBASE TABLE など。
FAIL_SAFE_PHYSICAL_BYTES INT64 フェイルセーフ ストレージで使用される物理(圧縮)バイト数(削除または変更されたデータ)
LAST_METADATA_INDEX_REFRESH_TIME TIMESTAMP テーブルのメタデータ インデックスの最終更新時間。

スコープと構文

このビューに対するクエリでは、リージョン修飾子を指定する必要があります。次の表に、このビューのリージョン スコープを示します。

ビュー名 リソース スコープ リージョン スコープ
[`PROJECT_ID`.]`region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE[_BY_PROJECT] プロジェクト レベル REGION
次のように置き換えます。

  • 省略可: PROJECT_ID: Google Cloud プロジェクトの ID。指定しない場合は、デフォルトのプロジェクトが使用されます。
+ REGION: 任意のデータセット リージョン名。 例: region-us

次の例では、指定したプロジェクトのテーブルのストレージ情報を返す方法を示します。

SELECT * FROM `myProject`.`region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE;

次の例では、指定したリージョンのテーブルのストレージ情報を返す方法を示します。

SELECT * FROM `region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE_BY_PROJECT;

例 1:

次の例では、現在のプロジェクトに対して課金される合計論理バイト数を示しています。

SELECT
  SUM(total_logical_bytes) AS total_logical_bytes
FROM
  `region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE;

次のような結果になります。

+---------------------+
| total_logical_bytes |
+---------------------+
| 971329178274633     |
+---------------------+
例 2:

次の例では、今後 30 日間の論理課金モデルと物理課金モデルの間における、データセットあたりの料金の差を予測する方法を示しています。この例では、クエリが実行されてから 30 日間、将来のストレージ使用量が一定であることを前提としています。予測はベーステーブルに限定され、データセット内の他のタイプのテーブルはすべて除外されます。

このクエリの料金変数で使用される料金は、us-central1 リージョンのものです。別のリージョンに対してこのクエリを実行する場合は、料金変数を適宜更新してください。料金体系の詳細については、ストレージ料金をご覧ください。

  1. Google Cloud コンソールで [BigQuery] ページを開きます。

    [BigQuery] ページに移動

  2. [クエリエディタ] ボックスに、次の GoogleSQL クエリを入力します。INFORMATION_SCHEMA には GoogleSQL 構文が必要です。GoogleSQL は Google Cloud コンソールのデフォルトの構文です。

    DECLARE active_logical_gib_price FLOAT64 DEFAULT 0.02;
    DECLARE long_term_logical_gib_price FLOAT64 DEFAULT 0.01;
    DECLARE active_physical_gib_price FLOAT64 DEFAULT 0.04;
    DECLARE long_term_physical_gib_price FLOAT64 DEFAULT 0.02;
    
    WITH
     storage_sizes AS (
       SELECT
         table_schema AS dataset_name,
         -- Logical
         SUM(IF(deleted=false, active_logical_bytes, 0)) / power(1024, 3) AS active_logical_gib,
         SUM(IF(deleted=false, long_term_logical_bytes, 0)) / power(1024, 3) AS long_term_logical_gib,
         -- Physical
         SUM(active_physical_bytes) / power(1024, 3) AS active_physical_gib,
         SUM(active_physical_bytes - time_travel_physical_bytes) / power(1024, 3) AS active_no_tt_physical_gib,
         SUM(long_term_physical_bytes) / power(1024, 3) AS long_term_physical_gib,
         -- Restorable previously deleted physical
         SUM(time_travel_physical_bytes) / power(1024, 3) AS time_travel_physical_gib,
         SUM(fail_safe_physical_bytes) / power(1024, 3) AS fail_safe_physical_gib,
       FROM
         `region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE_BY_PROJECT
       WHERE total_physical_bytes + fail_safe_physical_bytes > 0
         -- Base the forecast on base tables only for highest precision results
         AND table_type  = 'BASE TABLE'
         GROUP BY 1
     )
    SELECT
      dataset_name,
      -- Logical
      ROUND(active_logical_gib, 2) AS active_logical_gib,
      ROUND(long_term_logical_gib, 2) AS long_term_logical_gib,
      -- Physical
      ROUND(active_physical_gib, 2) AS active_physical_gib,
      ROUND(long_term_physical_gib, 2) AS long_term_physical_gib,
      ROUND(time_travel_physical_gib, 2) AS time_travel_physical_gib,
      ROUND(fail_safe_physical_gib, 2) AS fail_safe_physical_gib,
      -- Compression ratio
      ROUND(SAFE_DIVIDE(active_logical_gib, active_no_tt_physical_gib), 2) AS active_compression_ratio,
      ROUND(SAFE_DIVIDE(long_term_logical_gib, long_term_physical_gib), 2) AS long_term_compression_ratio,
      -- Forecast costs logical
      ROUND(active_logical_gib * active_logical_gib_price, 2) AS forecast_active_logical_cost,
      ROUND(long_term_logical_gib * long_term_logical_gib_price, 2) AS forecast_long_term_logical_cost,
      -- Forecast costs physical
      ROUND((active_no_tt_physical_gib + time_travel_physical_gib + fail_safe_physical_gib) * active_physical_gib_price, 2) AS forecast_active_physical_cost,
      ROUND(long_term_physical_gib * long_term_physical_gib_price, 2) AS forecast_long_term_physical_cost,
      -- Forecast costs total
      ROUND(((active_logical_gib * active_logical_gib_price) + (long_term_logical_gib * long_term_logical_gib_price)) -
         (((active_no_tt_physical_gib + time_travel_physical_gib + fail_safe_physical_gib) * active_physical_gib_price) + (long_term_physical_gib * long_term_physical_gib_price)), 2) AS forecast_total_cost_difference
    FROM
      storage_sizes
    ORDER BY
      (forecast_active_logical_cost + forecast_active_physical_cost) DESC;
  3. [実行] をクリックします。

次のような結果になります。

+--------------+--------------------+-----------------------+---------------------+------------------------+--------------------------+-----------------------------+------------------------------+----------------------------------+-------------------------------+----------------------------------+--------------------------------+
| dataset_name | active_logical_gib | long_term_logical_gib | active_physical_gib | long_term_physical_gib | active_compression_ratio | long_term_compression_ratio | forecast_active_logical_cost | forecaset_long_term_logical_cost | forecast_active_physical_cost | forecast_long_term_physical_cost | forecast_total_cost_difference |
+--------------+--------------------+-----------------------+---------------------+------------------------+--------------------------+-----------------------------+------------------------------+----------------------------------+-------------------------------+----------------------------------+--------------------------------+
| dataset1     |               10.0 |                  10.0 |                 1.0 |                    1.0 |                     10.0 |                        10.0 |                          0.2 |                              0.1 |                          0.04 |                             0.02 |                           0.24 |