INFORMATION_SCHEMA を使用したストリーミング メタデータの取得

INFORMATION_SCHEMA は、データセット、ルーティン、テーブル、ビュー、ジョブ、予約、ストリーミング データに関するメタデータへのアクセスを提供する一連のビューです。

INFORMATION_SCHEMA ストリーミング ビューにクエリを実行し、BigQuery へのデータのストリーミングに関する履歴情報とリアルタイム情報を取得できます。これらのビューには、データがストリーミングされた各テーブルの 1 分ごとに集計された統計情報が含まれます。BigQuery へのデータのストリーミングの詳細については、BigQuery へのデータのストリーミングをご覧ください。

必要な権限

INFORMATION_SCHEMA テーブルを使用してストリーミング メタデータを取得するには、適切に範囲を限定した権限が必要です。

  • STREAMING_TIMELINE_BY_PROJECT にはプロジェクトの bigquery.tables.list が必要で、BigQuery UserBigQuery Data ViewerBigQuery Data EditorBigQuery Data OwnerBigQuery Metadata ViewerBigQuery Resource AdminBigQuery Admin のロールで使用できます。
  • STREAMING_TIMELINE_BY_ORGANIZATION には組織の bigquery.tables.list が必要で、BigQuery UserBigQuery Data ViewerBigQuery Data EditorBigQuery Data OwnerBigQuery Metadata ViewerBigQuery Resource AdminBigQuery Admin のロールで使用できます。

スキーマ

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

  • INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT には、現在のプロジェクトの 1 分ごとに集計されたストリーミング統計情報が含まれます。
  • INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_ORGANIZATION には、現在のプロジェクトに関連付けられた組織全体の 1 分ごとに集計されたストリーミング統計が含まれます。

INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT および INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_ORGANIZATION ビューのスキーマは次のとおりです。

列名 データ型
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 分間ごとのすべての行からの合計バイト数。

データの保持

現在、INFORMATION_SCHEMA ストリーミング ビューには過去 180 日間のストリーミング履歴のみが保持されます。

リージョン

BigQuery の INFORMATION_SCHEMA ストリーミング ビューはリージョン化されています。これらのビューに対してクエリを実行するには、`region-region-name`.INFORMATION_SCHEMA.view という形式のサポートされているリージョン名を接頭辞として付ける必要があります。

例:

  • 米国マルチリージョンのデータに対してクエリを実行するには、`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 分ごとの内訳を計算し、エラーコードごとに分類します。

デフォルト プロジェクト以外のプロジェクトに対してクエリを実行するには、次の形式 `project_id`.`region-region_name`.INFORMATION_SCHEMA.view でプロジェクト ID を追加します。例: `myproject`.`region-us`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT

クエリを実行するには:

Console

  1. Cloud Console で、BigQuery Web UI を開きます。

    Cloud Console に移動

  2. [クエリエディタ] ボックスに、下の標準 SQL クエリを入力します。INFORMATION_SCHEMA には標準 SQL 構文を使用する必要があります。標準 SQL は Cloud Console のデフォルトの構文です。

    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
     1 DESC
    
    
  3. [実行] をクリックします。

CLI

query コマンドで、--nouse_legacy_sql または --use_legacy_sql=false フラグを使用して標準 SQL 構文を指定します。INFORMATION_SCHEMA クエリには標準 SQL 構文を使用する必要があります。

クエリを実行するには、次のように入力します。

bq query --nouse_legacy_sql \
'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
     1 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 分あたりの内訳を計算し、エラーコードのカテゴリごとに分類します。このクエリを使用してダッシュボードを作成できます。

デフォルト プロジェクト以外のプロジェクトに対してクエリを実行するには、次の形式 `project_id`.`region-region_name`.INFORMATION_SCHEMA.view でプロジェクト ID を追加します。例: `myproject`.`region-us`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT

クエリを実行するには:

Console

  1. Cloud Console で、BigQuery Web UI を開きます。

    Cloud Console に移動

  2. [クエリエディタ] ボックスに、下の標準 SQL クエリを入力します。INFORMATION_SCHEMA には標準 SQL 構文を使用する必要があります。標準 SQL は Cloud Console のデフォルトの構文です。

    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
     1 DESC
    
  3. [実行] をクリックします。

CLI

query コマンドで、--nouse_legacy_sql または --use_legacy_sql=false フラグを使用して標準 SQL 構文を指定します。INFORMATION_SCHEMA クエリには標準 SQL 構文を使用する必要があります。

クエリを実行するには、次のように入力します。

bq query --nouse_legacy_sql \
'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
     1 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 個のテーブルのストリーミング統計情報を返します。

デフォルト プロジェクト以外のプロジェクトに対してクエリを実行するには、次の形式 `project_id`.`region-region_name`.INFORMATION_SCHEMA.view でプロジェクト ID を追加します。例: `myproject`.`region-us`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT

クエリを実行するには:

Console

  1. Cloud Console で、BigQuery Web UI を開きます。

    Cloud Console に移動

  2. [クエリエディタ] ボックスに、下の標準 SQL クエリを入力します。INFORMATION_SCHEMA には標準 SQL 構文を使用する必要があります。標準 SQL は Cloud Console のデフォルトの構文です。

    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 1, 2, 3
    ORDER BY num_bytes DESC
    LIMIT 10
    
  3. [実行] をクリックします。

CLI

query コマンドで、--nouse_legacy_sql または --use_legacy_sql=false フラグを使用して標準 SQL 構文を指定します。INFORMATION_SCHEMA クエリには標準 SQL 構文を使用する必要があります。

クエリを実行するには、次のように入力します。

bq query --nouse_legacy_sql \
'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 1, 2, 3
 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 日あたりのエラーの内訳を計算し、エラーコードごとに分類します。

デフォルト プロジェクト以外のプロジェクトに対してクエリを実行するには、次の形式 `project_id`.`region-region_name`.INFORMATION_SCHEMA.view でプロジェクト ID を追加します。例: `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT

クエリを実行するには:

Console

  1. Cloud Console で、BigQuery Web UI を開きます。

    Cloud Console に移動

  2. [クエリエディタ] ボックスに、下の標準 SQL クエリを入力します。INFORMATION_SCHEMA には標準 SQL 構文を使用する必要があります。標準 SQL は Cloud Console のデフォルトの構文です。

    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
    
  3. [実行] をクリックします。

CLI

query コマンドで、--nouse_legacy_sql または --use_legacy_sql=false フラグを使用して標準 SQL 構文を指定します。INFORMATION_SCHEMA クエリには標準 SQL 構文を使用する必要があります。

クエリを実行するには、次のように入力します。

bq query --nouse_legacy_sql \
'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 |
+---------------------+-------------+------------+----------+----------------+----------+-----------+--------------+
  

次のステップ