RESERVATIONS_TIMELINE ビュー

INFORMATION_SCHEMA.RESERVATIONS_TIMELINE ビューには、各予約管理プロジェクトの予約メタデータの 1 分ごとのタイムスライスがリアルタイムで表示されます。また、per_second_details 配列には、毎秒の自動スケーリングの詳細が表示されます。

必要な権限

INFORMATION_SCHEMA.RESERVATION_TIMELINE ビューをクエリするには、プロジェクトに対する bigquery.reservations.list Identity and Access Management(IAM)権限が必要です。次に示す各 IAM の事前定義ロールには、必要な権限が含まれています。

  • BigQuery リソース管理者(roles/bigquery.resourceAdmin
  • BigQuery リソース編集者(roles/bigquery.resourceEditor
  • BigQuery リソース閲覧者(roles/bigquery.resourceViewer
  • BigQuery ユーザー(roles/bigquery.user
  • BigQuery 管理者(roles/bigquery.admin

BigQuery の権限の詳細については、BigQuery の IAM ロールと権限をご覧ください。

スキーマ

INFORMATION_SCHEMA.RESERVATIONS_TIMELINE_BY_* ビューに対してクエリを実行すると、クエリ結果として、過去 180 日間に行われたすべての BigQuery の分単位の行が表示され、180 日より前に行われた BigQuery 予約では分単位の行に予約変更が示されます。各期間は整数分の時点で開始し、厳密に 1 分間継続します。

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

列名 データ型
autoscale STRUCT

予約の自動スケーリング容量に関する情報が含まれます。次のようなフィールドが含まれます。

  • current_slots: 自動スケーリングによって予約に追加されるスロットの数。
  • max_slots: 自動スケーリングによって予約に追加できるスロットの最大数。
edition STRING この予約に関連付けられているエディション。エディションの詳細については、BigQuery エディションの概要をご覧ください。
ignore_idle_slots BOOL スロット共有が有効になっている場合は false、それ以外の場合は true。
labels RECORD 予約に関連付けられているラベルの配列。
period_start TIMESTAMP この 1 分間の開始時刻。
per_second_details STRUCT

予約容量と使用状況に関する情報が毎秒含まれています。次のようなフィールドが含まれます。

  • start_time: 秒の正確なタイムスタンプ。
  • autoscale_current_slots: この秒に自動スケーリングによって予約に追加されたスロットの数。
  • autoscale_max_slots: この時点で自動スケーリングによって予約に追加できるスロットの最大数。
  • slots_assigned: この予約に割り当てられているスロットの数(この秒)。これは、予約のベースライン スロット容量に等しくなります。
  • slots_max_assigned: この予約の最大スロット容量(この時点でのスロット共有を含む)。ignore_idle_slots が true の場合、このフィールドは slots_assigned と同じです。それ以外の場合、slots_max_assigned フィールドは、管理プロジェクトのすべての容量コミットメントのスロットの合計数です。

この 1 分間に自動スケーリングまたは予約の変更があった場合、配列には 60 行が入力されます。ただし、この 1 分間に変更されない非自動スケーリング予約の場合、配列は空になります。これは、同じ数値が 60 回繰り返されるのを防ぐためです。

project_id STRING 予約管理プロジェクトの ID。
project_number INTEGER プロジェクトの番号。
reservation_id STRING jobs_timeline テーブルと結合します。形式は、project_id:location.reservation_name です。
reservation_name STRING 予約の名前。
slots_assigned INTEGER この予約に割り当てられているスロットの数。
slots_max_assigned INTEGER この予約の最大スロット容量(スロット共有を含む)。ignore_idle_slots が true の場合は slots_assigned と同じです。それ以外の場合は、管理プロジェクトのすべての容量コミットメントのスロットの合計数です。
max_slots INTEGER この予約で使用できるスロットの最大数。ベースライン スロット(slot_capacity)、アイドル状態のスロット(ignore_idle_slots が false の場合)、自動スケーリング スロットが含まれます。このフィールドは、予約の予測可能性機能を使用するためにユーザーが指定します。
scaling_mode STRING 予約のスケーリング モード。ベースラインから max_slots への予約のスケーリング方法を決定します。このフィールドは、予約の予測可能性機能を使用するためにユーザーが指定します。

スコープと構文

このビューに対するクエリでは、リージョン修飾子を指定する必要があります。リージョン修飾子を指定しない場合、メタデータはすべてのリージョンで取得されます。次の表に、このビューのリージョン スコープとリソース スコープを示します。

ビュー名 リソース スコープ リージョン スコープ
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.RESERVATIONS_TIMELINE[_BY_PROJECT] プロジェクト レベル REGION
次のように置き換えます。
  • 省略可: PROJECT_ID: Google Cloud プロジェクトの ID。指定しない場合は、デフォルトのプロジェクトが使用されます。
  • REGION: 任意のデータセット リージョン名。例: `region-us`

例: 1 秒あたりの自動スケーリングを確認する

次の例は、すべてのジョブで YOUR_RESERVATION_ID の 1 秒あたりの自動スケーリングを示しています。

SELECT s.start_time, s.autoscale_current_slots
FROM `region-us.INFORMATION_SCHEMA.RESERVATIONS_TIMELINE` m
JOIN m.per_second_details s
WHERE period_start BETWEEN '2025-09-28' AND '2025-09-29'
  AND reservation_id = 'YOUR_RESERVATION_ID'
ORDER BY period_start, s.start_time

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

+---------------------+-------------------------+
|     start_time      | autoscale_current_slots |
+---------------------+-------------------------+
| 2025-09-28 00:00:00 |                    1600 |
| 2025-09-28 00:00:01 |                    1600 |
| 2025-09-28 00:00:02 |                    1600 |
| 2025-09-28 00:00:03 |                    1600 |
| 2025-09-28 00:00:04 |                    1600 |
+---------------------+-------------------------+

例: 1 秒あたりのスロットの合計使用量を確認する

デフォルト プロジェクト以外のプロジェクトに対してクエリを実行するには、次の形式でプロジェクト ID を追加します。

`PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION
例: `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION

次の例は、すべてのジョブで YOUR_RESERVATION_ID に割り当てられたプロジェクトの 1 秒あたりのスロットの使用状況を示しています。

SELECT
  s.start_time AS period_start,
  SUM(jobs.period_slot_ms) / 1000 AS period_slot_seconds,
  ANY_VALUE(s.slots_assigned) AS estimated_slots_assigned,
  ANY_VALUE(s.slots_max_assigned) AS estimated_slots_max_assigned
FROM `region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION jobs
JOIN `region-us`.INFORMATION_SCHEMA.RESERVATIONS_TIMELINE res
    ON jobs.reservation_id = res.reservation_id
 JOIN res.per_second_details s
    ON jobs.period_start = s.start_time
WHERE
  jobs.job_creation_time
    BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
        AND CURRENT_TIMESTAMP()
  AND res.period_start
    BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
        AND CURRENT_TIMESTAMP()
  AND res.reservation_id = 'YOUR_RESERVATION_ID'
  AND (jobs.statement_type != "SCRIPT" OR jobs.statement_type IS NULL)  -- Avoid duplicate byte counting in parent and children jobs.
GROUP BY
  period_start
ORDER BY
  period_start DESC;

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

+-----------------------+---------------------+--------------------------+------------------------------+
|     period_start      | period_slot_seconds | estimated_slots_assigned | estimated_slots_max_assigned |
+-----------------------+---------------------+--------------------------+------------------------------+
|2021-06-08 21:33:59 UTC|       100.000       |         100              |           100                |
|2021-06-08 21:33:58 UTC|        96.753       |         100              |           100                |
|2021-06-08 21:33:57 UTC|        41.668       |         100              |           100                |
+-----------------------+---------------------+--------------------------+------------------------------+

例: 予約によるスロット使用状況

次の例は、前日の 1 秒単位のスロット使用量を予約ごとに示しています。

SELECT
  s.start_time AS period_start,
  res.reservation_id,
  SUM(jobs.period_slot_ms) / 1000 AS period_slot_seconds,
  ANY_VALUE(res.slots_assigned) AS estimated_slots_assigned,
  ANY_VALUE(res.slots_max_assigned) AS estimated_slots_max_assigned,
FROM `region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION jobs
JOIN `region-us`.INFORMATION_SCHEMA.RESERVATIONS_TIMELINE res
  ON jobs.reservation_id = res.reservation_id
JOIN res.per_second_details s
  ON jobs.period_start = s.start_time
WHERE
  jobs.job_creation_time
      BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
          AND CURRENT_TIMESTAMP()
  AND res.period_start
      BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
          AND CURRENT_TIMESTAMP()
  AND (jobs.statement_type != "SCRIPT" OR jobs.statement_type IS NULL)  -- Avoid duplicate byte counting in parent and children jobs.
GROUP BY
  period_start,
  reservation_id
ORDER BY
  period_start DESC,
  reservation_id;

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

+-----------------------+----------------+---------------------+--------------------------+------------------------------+
|     period_start      | reservation_id | period_slot_seconds | estimated_slots_assigned | estimated_slots_max_assigned |
+-----------------------+----------------+---------------------+--------------------------+------------------------------+
|2021-06-08 21:33:59 UTC|     prod01     |       100.000       |             100          |              100             |
|2021-06-08 21:33:58 UTC|     prod02     |       177.201       |             200          |              500             |
|2021-06-08 21:32:57 UTC|     prod01     |        96.753       |             100          |              100             |
|2021-06-08 21:32:56 UTC|     prod02     |       182.329       |             200          |              500             |
+-----------------------+----------------+---------------------+--------------------------+------------------------------+