STREAMING_TIMELINE ビュー

INFORMATION_SCHEMA.STREAMING_TIMELINE ビューには、現在のプロジェクトの 1 分ごとに集計されたストリーミング統計情報が含まれます。

INFORMATION_SCHEMA ストリーミング ビューにクエリを実行し、レガシー tabledata.insertAll メソッドを使用する、BigQuery Storage Write API ではないデータの BigQuery へのストリーミングに関する履歴情報とリアルタイム情報を取得できます。BigQuery へのデータのストリーミングの詳細については、BigQuery へのデータのストリーミングをご覧ください。

必要な権限

INFORMATION_SCHEMA.STREAMING_TIMELINE ビューをクエリするには、プロジェクトの bigquery.tables.list Identity and Access Management(IAM)権限が必要です。

次に示す事前定義された各 IAM ロールには、必要な権限が含まれています。

  • roles/bigquery.user
  • roles/bigquery.dataViewer
  • roles/bigquery.dataEditor
  • roles/bigquery.dataOwner
  • roles/bigquery.metadataViewer
  • roles/bigquery.resourceAdmin
  • roles/bigquery.admin

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

スキーマ

INFORMATION_SCHEMA ストリーミング ビューにクエリを実行すると、クエリ結果に、BigQuery へのデータのストリーミングに関する履歴情報とリアルタイム情報が含まれます。次のビューの各行は、start_timestamp から開始する 1 分ごとに集計された、特定のテーブルへのストリーミングの統計を表します。統計情報はエラーコード別にグルーピングされます。タイムスタンプとテーブルの組み合わせごとに、1 分間で発生したエラーコード別に 1 行ずつ表示されます。リクエストに成功すると、エラーコードは NULL に設定されます。特定の期間中にテーブルにデータがストリーミングされなかった場合、そのテーブルに対応するタイムスタンプの行は存在しません。

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

列名 データ型
start_timestamp TIMESTAMP (パーティショニング列)集計された統計情報の 1 分ごとの開始タイムスタンプ。
project_id STRING (クラスタリング列)プロジェクトの ID。
project_number INTEGER プロジェクトの番号。
dataset_id STRING (クラスタリング列)データセットの ID。
table_id STRING (クラスタリング列)テーブルの ID。
error_code STRING この行で指定されたリクエストに対して返されるエラーコード。リクエストが成功した場合は NULL。
total_requests INTEGER 1 分間ごとのすべてのリクエストの合計数。
total_rows INTEGER 1 分間ごとのすべてのリクエストの合計行数。
total_input_bytes INTEGER 1 分間ごとのすべての行からの合計バイト数。

データの保持

このビューには、過去 180 日間のストリーミング履歴が入っています。

スコープと構文

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

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

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

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

    • 米国マルチリージョンのデータに対してクエリを実行するには、`region-us`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT を使用します。
    • EU マルチリージョンのデータに対してクエリを実行するには、`region-eu`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT を使用します。
    • asia-northeast1 リージョンのデータに対してクエリを実行するには、`region-asia-northeast1`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT を使用します。

    使用可能なリージョンの一覧については、データセットのロケーションをご覧ください。

    例 1: 最近のストリーミング エラー

    次の例では、過去 30 分間にプロジェクト内の全テーブルで失敗したリクエストの合計数に対し 1 分ごとの内訳を計算して、エラーコードごとに分類します。

    SELECT
      start_timestamp,
      error_code,
      SUM(total_requests) AS num_failed_requests
    FROM
      `region-us`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT
    WHERE
      error_code IS NOT NULL
      AND start_timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP, INTERVAL 30 MINUTE)
    GROUP BY
      start_timestamp,
      error_code
    ORDER BY
      start_timestamp DESC;

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

    +---------------------+------------------+---------------------+
    |   start_timestamp   |    error_code    | num_failed_requests |
    +---------------------+------------------+---------------------+
    | 2020-04-15 20:55:00 | INTERNAL_ERROR   |                  41 |
    | 2020-04-15 20:41:00 | CONNECTION_ERROR |                   5 |
    | 2020-04-15 20:30:00 | INTERNAL_ERROR   |                 115 |
    +---------------------+------------------+---------------------+
    
    例 2: エラーコードを含むすべてのリクエストの 1 分あたりの内訳

    次の例では、成功したストリーミング リクエストと失敗したストリーミング リクエストの 1 分あたりの内訳を計算し、エラーコードのカテゴリごとに分類します。このクエリを使用してダッシュボードにデータを入力できます。

    SELECT
      start_timestamp,
      SUM(total_requests) AS total_requests,
      SUM(total_rows) AS total_rows,
      SUM(total_input_bytes) AS total_input_bytes,
      SUM(
        IF(
          error_code IN ('QUOTA_EXCEEDED', 'RATE_LIMIT_EXCEEDED'),
          total_requests,
          0)) AS quota_error,
      SUM(
        IF(
          error_code IN (
            'INVALID_VALUE', 'NOT_FOUND', 'SCHEMA_INCOMPATIBLE',
            'BILLING_NOT_ENABLED', 'ACCESS_DENIED', 'UNAUTHENTICATED'),
          total_requests,
          0)) AS user_error,
      SUM(
        IF(
          error_code IN ('CONNECTION_ERROR','INTERNAL_ERROR'),
          total_requests,
          0)) AS server_error,
      SUM(IF(error_code IS NULL, 0, total_requests)) AS total_error,
    FROM
      `region-us`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT
    GROUP BY
      start_timestamp
    ORDER BY
      start_timestamp DESC;

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

    +---------------------+----------------+------------+-------------------+-------------+------------+--------------+-------------+
    |   start_timestamp   | total_requests | total_rows | total_input_bytes | quota_error | user_error | server_error | total_error |
    +---------------------+----------------+------------+-------------------+-------------+------------+--------------+-------------+
    | 2020-04-15 22:00:00 |         441854 |     441854 |       23784853118 |           0 |          0 |           17 |          17 |
    | 2020-04-15 21:59:00 |         355627 |     355627 |       26101982742 |           0 |          0 |            0 |           0 |
    | 2020-04-15 21:58:00 |         354603 |     354603 |       26160565341 |           0 |          0 |            0 |           0 |
    | 2020-04-15 21:57:00 |         298823 |     298823 |       23877821442 |           0 |          0 |            0 |           0 |
    +---------------------+----------------+------------+-------------------+-------------+------------+--------------+-------------+
    
    例 3: 受信トラフィックが最も多いテーブル

    次の例では、受信トラフィックが最も多い 10 個のテーブルのストリーミング統計情報を返します。

    SELECT
      project_id,
      dataset_id,
      table_id,
      SUM(total_rows) AS num_rows,
      SUM(total_input_bytes) AS num_bytes,
      SUM(total_requests) AS num_requests
    FROM
      `region-us`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT
    GROUP BY
      project_id,
      dataset_id,
      table_id
    ORDER BY
      num_bytes DESC
    LIMIT 10;

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

    +----------------------+------------+-------------------------------+------------+----------------+--------------+
    |      project_id      | dataset_id |           table_id            |  num_rows  |   num_bytes    | num_requests |
    +----------------------+------------+-------------------------------+------------+----------------+--------------+
    | my-project           | dataset1   | table1                        | 8016725532 | 73787301876979 |   8016725532 |
    | my-project           | dataset1   | table2                        |   26319580 | 34199853725409 |     26319580 |
    | my-project           | dataset2   | table1                        |   38355294 | 22879180658120 |     38355294 |
    | my-project           | dataset1   | table3                        |  270126906 | 17594235226765 |    270126906 |
    | my-project           | dataset2   | table2                        |   95511309 | 17376036299631 |     95511309 |
    | my-project           | dataset2   | table3                        |   46500443 | 12834920497777 |     46500443 |
    | my-project           | dataset2   | table4                        |   25846270 |  7487917957360 |     25846270 |
    | my-project           | dataset1   | table4                        |   18318404 |  5665113765882 |     18318404 |
    | my-project           | dataset1   | table5                        |   42829431 |  5343969665771 |     42829431 |
    | my-project           | dataset1   | table6                        |    8771021 |  5119004622353 |      8771021 |
    +----------------------+------------+-------------------------------+------------+----------------+--------------+
    
    例 4: テーブルのストリーミング エラー率

    次の例では、特定のテーブルに対して 1 日あたりのエラーの内訳を計算し、エラーコードごとに分類します。

    SELECT
      TIMESTAMP_TRUNC(start_timestamp, DAY) as day,
      project_id,
      dataset_id,
      table_id,
      error_code,
      SUM(total_rows) AS num_rows,
      SUM(total_input_bytes) AS num_bytes,
      SUM(total_requests) AS num_requests
    FROM
      `region-us`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT
    WHERE
      table_id LIKE 'my_table'
    GROUP BY
      project_id, dataset_id, table_id, error_code, day
    ORDER BY
      day, project_id, dataset_id DESC;

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

    +---------------------+-------------+------------+----------+----------------+----------+-----------+--------------+
    |         day         |  project_id | dataset_id | table_id |   error_code   | num_rows | num_bytes | num_requests |
    +---------------------+-------------+------------+----------+----------------+----------+-----------+--------------+
    | 2020-04-21 00:00:00 | my_project  | my_dataset | my_table | NULL           |       41 |    252893 |           41 |
    | 2020-04-20 00:00:00 | my_project  | my_dataset | my_table | NULL           |     2798 |  10688286 |         2798 |
    | 2020-04-19 00:00:00 | my_project  | my_dataset | my_table | NULL           |     2005 |   7979495 |         2005 |
    | 2020-04-18 00:00:00 | my_project  | my_dataset | my_table | NULL           |     2054 |   7972378 |         2054 |
    | 2020-04-17 00:00:00 | my_project  | my_dataset | my_table | NULL           |     2056 |   6978079 |         2056 |
    | 2020-04-17 00:00:00 | my_project  | my_dataset | my_table | INTERNAL_ERROR |        4 |     10825 |            4 |
    +---------------------+-------------+------------+----------+----------------+----------+-----------+--------------+