PARTITIONS ビュー

INFORMATION_SCHEMA.PARTITIONS ビューには、パーティションごとに 1 行が表示されます。

INFORMATION_SCHEMA.PARTITIONS ビューのクエリは 1,000 テーブルに制限されます。プロジェクト レベルでパーティションに関するデータを取得するには、クエリを複数のクエリに分割して、結果を結合します。この上限を超えると、次のようなエラーが発生することがあります。

INFORMATION_SCHEMA.PARTITIONS query attempted to read too many tables. Please add more restrictive filters.

必要な権限

INFORMATION_SCHEMA.PARTITIONS ビューをクエリするには、次の Identity and Access Management(IAM)権限が必要です。

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

次の各 IAM 事前定義ロールには、上の権限が含まれています。

  • roles/bigquery.admin
  • roles/bigquery.dataEditor
  • roles/bigquery.dataViewer

BigQuery の権限の詳細については、IAM でのアクセス制御をご覧ください。

スキーマ

INFORMATION_SCHEMA.PARTITIONS ビューにクエリを実行すると、クエリ結果にはパーティションごとに 1 行が含まれます。ただし、__UNPARTITIONED__ パーティションに長期とアクティブ ストレージ ティアの両方のデータが存在する場合は例外です。この場合、ビューは __UNPARTITIONED__ パーティションの 2 つの行(ストレージ ティアごとに 1 つ)を返します。

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

列名 データ型
TABLE_CATALOG STRING データセットを含むプロジェクトのプロジェクト ID
TABLE_SCHEMA STRING datasetId とも呼ばれる、テーブルを含むデータセットの名前
TABLE_NAME STRING テーブルの名前(tableId とも呼ばれる)
PARTITION_ID STRING 単一のパーティションの ID。パーティション分割されていないテーブルの場合、値は NULL です。パーティショニング列に NULL 値を持つ行が含まれているパーティション分割テーブルの場合、値は __NULL__ です。
TOTAL_ROWS INTEGER パーティション内の行の合計数
TOTAL_LOGICAL_BYTES INTEGER パーティション内の論理バイトの合計数
LAST_MODIFIED_TIME TIMESTAMP データが最後にパーティションに書き込まれた時刻
STORAGE_TIER STRING パーティションのストレージ階層:

スコープと構文

このビューに対するクエリでは、データセット修飾子を指定する必要があります。データセット修飾子が指定されたクエリの場合は、データセットに対する権限が必要です。詳細については、構文をご覧ください。次の表に、このビューのリージョン スコープとリソース スコープを示します。

ビュー名 リソース スコープ リージョン スコープ
[PROJECT_ID.]DATASET_ID.INFORMATION_SCHEMA.PARTITIONS データセット レベル データセットのロケーション
次のように置き換えます。

  • 省略可: PROJECT_ID: Google Cloud プロジェクトの ID。指定しない場合は、デフォルトのプロジェクトが使用されます。

例 1

次の例では、mydataset データセット内のすべてのテーブルで各ストレージ階層が使用する論理バイト数を計算します。

SELECT
  storage_tier,
  SUM(total_logical_bytes) AS logical_bytes
FROM
  `mydataset.INFORMATION_SCHEMA.PARTITIONS`
GROUP BY
  storage_tier;

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

+--------------+----------------+
| storage_tier | logical_bytes  |
+--------------+----------------+
| LONG_TERM    |  1311495144879 |
| ACTIVE       |    66757629240 |
+--------------+----------------+

例 2

次の例では、partition_id フィールドからパーティション タイプを抽出し、一般公開 bigquery-public-data.covid19_usafacts データセットのテーブルレベルでパーティション情報を集計する列を作成します。

SELECT
  table_name,
  CASE
    WHEN regexp_contains(partition_id, '^[0-9]{4}$') THEN 'YEAR'
    WHEN regexp_contains(partition_id, '^[0-9]{6}$') THEN 'MONTH'
    WHEN regexp_contains(partition_id, '^[0-9]{8}$') THEN 'DAY'
    WHEN regexp_contains(partition_id, '^[0-9]{10}$') THEN 'HOUR'
    END AS partition_type,
  min(partition_id) AS earliest_partition,
  max(partition_id) AS latest_partition_id,
  COUNT(partition_id) AS partition_count,
  sum(total_logical_bytes) AS sum_total_logical_bytes,
  max(last_modified_time) AS max_last_updated_time
FROM `bigquery-public-data.covid19_usafacts.INFORMATION_SCHEMA.PARTITIONS`
GROUP BY 1, 2;

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

+-----------------+----------------+--------------------+---------------------+-----------------+-------------------------+--------------------------------+
| table_name      | partition_type | earliest_partition | latest_partition_id | partition_count | sum_total_logical_bytes | max_last_updated_time          |
+--------------+-------------------+--------------------+---------------------+-----------------+-------------------------+--------------------------------+
| confirmed_cases | DAY            | 20221204           | 20221213            | 10              | 26847302                | 2022-12-13 00:09:25.604000 UTC |
| deaths          | DAY            | 20221204           | 20221213            | 10              | 26847302                | 2022-12-13 00:09:24.709000 UTC |
| summary         | DAY            | 20221204           | 20221213            | 10              | 241285338               | 2022-12-13 00:09:27.496000 UTC |
+-----------------+----------------+--------------------+---------------------+-----------------+-------------------------+--------------------------------+