RESERVATIONS_TIMELINE ビュー

INFORMATION_SCHEMA.RESERVATIONS_TIMELINE ビューには、各予約管理プロジェクトの予約メタデータの 1 分ごとのニア リアルタイム タイムスライスが表示されます。スロットの使用状況とスロット容量を比較するには、予約タイムライン ビューを使用して、予約情報とジョブのタイムラインを組み合わせることができます。

スキーマ

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。
period_start TIMESTAMP この 1 分間の開始時刻。
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 と同じです。それ以外の場合は、管理プロジェクトのすべての容量コミットメントのスロットの合計数です。

スコープと構文

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

ビュー名 リソース スコープ リージョン スコープ
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.RESERVATIONS_TIMELINE[_BY_PROJECT] プロジェクト レベル REGION
以下を置き換えます。

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

  • REGION: 任意のデータセット リージョン名。例: `region-us`

  • 例: 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
      res.period_start,
      SUM(jobs.period_slot_ms) / 1000 / 60 AS period_slot_minutes,
      ANY_VALUE(res.slots_assigned) AS slot_assigned,
      ANY_VALUE(res.slots_max_assigned) AS slots_max_assigned
    FROM
      `region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION jobs
    JOIN
      `region-us`.INFORMATION_SCHEMA.RESERVATIONS_TIMELINE res
      ON
        TIMESTAMP_TRUNC(jobs.period_start, MINUTE) = res.period_start
        AND jobs.reservation_id = res.reservation_id
    WHERE
      jobs.job_creation_time
        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_minutes | slots_assigned| slots_max_assigned|
    +-----------------------+---------------------+---------------+-------------------+
    |2021-06-08 21:33:00 UTC|       100.000       |      100      |        100        |
    |2021-06-08 21:32:00 UTC|        96.753       |      100      |        100        |
    |2021-06-08 21:31:00 UTC|        41.668       |      100      |        100        |
    +-----------------------+---------------------+---------------+-------------------+
    

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

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

    SELECT
      res.period_start,
      res.reservation_id,
      SUM(jobs.period_slot_ms) / 1000 / 60 AS period_slot_minutes,
      ANY_VALUE(res.slots_assigned) AS slots_assigned,
      ANY_VALUE(res.slots_max_assigned) AS slots_max_assigned,
    FROM
      `region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION jobs
    JOIN
      `region-us`.INFORMATION_SCHEMA.RESERVATIONS_TIMELINE res
      ON TIMESTAMP_TRUNC(jobs.period_start, MINUTE) = res.period_start
         AND jobs.reservation_id = res.reservation_id
    WHERE
      jobs.job_creation_time
      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_minutes | slot_assigned | slots_max_assigned |
    +-----------------------+----------------+---------------------+---------------+--------------------+
    |2021-06-08 21:33:00 UTC|     prod01     |       100.000       |      100      |        100         |
    |2021-06-08 21:33:00 UTC|     prod02     |       177.201       |      200      |        500         |
    |2021-06-08 21:32:00 UTC|     prod01     |        96.753       |      100      |        100         |
    |2021-06-08 21:32:00 UTC|     prod02     |       182.329       |      200      |        500         |
    +-----------------------+----------------+---------------------+---------------+--------------------+