マテリアライズド ビューをモニタリングする

BigQuery の INFORMATION_SCHEMA ビューを表示して、マテリアライズド ビューの使用状況と更新ジョブをモニタリングできます。マテリアライズド ビューのリストを取得するには、マテリアライズド ビューを一覧表示するをご覧ください。

マテリアライズド ビューの INFORMATION_SCHEMA ビュー

マテリアライズド ビューを検出するには、INFORMATION_SCHEMA.TABLES ビューに対してクエリを実行します。マテリアライズド ビューのプロパティを取得するには、INFORMATION_SCHEMA.TABLE_OPTIONS ビューに対してクエリを実行します。

マテリアライズド ビューは、INFORMATION_SCHEMA.VIEWS ビューテーブルには表示されません。

自動更新をモニタリングする

このセクションでは、マテリアライズド ビューの更新の詳細を表示する方法について説明します。

最終更新ステータスを表示する

マテリアライズド ビューの現在のステータスを取得するには、tables.get メソッドを呼び出すか、INFORMATION_SCHEMA.MATERIALIZED_VIEWS ビューに対してクエリを実行します。

次に例を示します。

SELECT
  table_name, last_refresh_time, refresh_watermark, last_refresh_status
FROM
  `DATASET`.INFORMATION_SCHEMA.MATERIALIZED_VIEWS;

last_refresh_status の値が NULL でない場合は、最後の自動更新ジョブが失敗しています。手動更新リクエストはここに反映されません。ベーステーブルを変更すると、マテリアライズド ビューの定義が無効になり、自動更新中にエラーが発生することがあります。詳細については、増分更新をご覧ください。たとえば、マテリアライズド ビューが参照する列がベーステーブルから削除されると、last_refresh_status フィールドは invalidQuery エラーを返します。詳細については、エラー メッセージをご覧ください。

自動更新ジョブのリストを取得する

マテリアライズド ビューの自動更新ジョブのリストを取得するには、jobs.list メソッドを呼び出します。ジョブの詳細を取得するには、jobs.get メソッドを呼び出します。INFORMATION_SCHEMA.JOBS_BY_* ビューに対してクエリを実行して、ジョブを取得することもできます。自動更新ジョブでは、ジョブ ID の先頭に materialized_view_refresh という接頭辞が付いており、BigQuery 管理者アカウントによって開始されます。

次に例を示します。

SELECT
  job_id, total_slot_ms, total_bytes_processed,
  materialized_view_statistics.materialized_view[SAFE_OFFSET(0)].rejected_reason
  AS full_refresh_reason
FROM
  `region-us.INFORMATION_SCHEMA.JOBS_BY_PROJECT`
WHERE
  job_id LIKE '%materialized_view_refresh_%'
LIMIT 10;

更新ジョブの費用をモニタリングし、必要に応じて自動更新間隔を調整するには、total_bytes_processed フィールドと total_slot_ms フィールドを表示します。

たとえば、ベーステーブルの取り込み率が比較的低い場合、ビューの更新頻度を少なくするべきです。反対に、基になるデータがすぐに変更される場合は、より頻繁に更新する必要があります。

夜間の抽出、変換、読み込み(ETL)パイプラインを使用するなど、事前に定義された時点でベーステーブルがデータを取り込む場合は、次のように、マテリアライズド ビューのメンテナンス スケジュールを制御することを検討してください。

  1. 自動更新を無効にします

  2. ETL パイプラインの一部として、または特定の時刻にスケジュールされたクエリを構成して、手動更新を実行します。

マテリアライズド ビューの料金の詳細については、マテリアライズド ビューの料金をご覧ください。

マテリアライズド ビューの使用状況をモニタリングする

クエリジョブのマテリアライズド ビューの使用状況を表示するには、jobs.get メソッドを呼び出すか、INFORMATION_SCHEMA.JOBS_BY_* ビューに対してクエリを実行し、materialized_view_statistics フィールドを表示します。このフィールドには、次のような、クエリによるマテリアライズド ビューの使用状況の詳細が示されます。

  • マテリアライズド ビューが使用されたかどうか。
  • マテリアライズド ビューが使用されていない場合は、使用が却下された理由

次に例を示します。

SELECT
  job_id, materialized_view_statistics
FROM
  region-US.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE
  job_id = '';

マテリアライズド ビューの使用状況の経時的変化を確認するには、INFORMATION_SCHEMA.JOBS_BY_* ビューに対してクエリを実行します。

たとえば、次のクエリは、ターゲットのマテリアライズド ビューを使用している最近のクエリジョブのサマリーを返します。

SELECT
  mv.table_reference.dataset_id,
  mv.table_reference.table_id,
  MAX(job.creation_time) latest_job_time,
  COUNT(job_id) job_count
FROM
  region-US.INFORMATION_SCHEMA.JOBS_BY_PROJECT job,
  UNNEST(materialized_view_statistics.materialized_view) mv
WHERE
  job.creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP, INTERVAL 7 DAY)
  AND mv.table_reference.dataset_id = 'my_dataset'
  AND mv.table_reference.table_id = 'my_materialized_view'
  AND mv.chosen = TRUE
GROUP BY 1, 2;

マテリアライズド ビューを使用する低速なクエリのトラブルシューティング

マテリアライズド ビューを使用するクエリが想定よりも低速な場合は、次の操作を行います。

  1. 意図したマテリアライズド ビューが実際にクエリで使用されていることを確認します。詳細な手順については、マテリアライズド ビューの使用状況をモニタリングするをご覧ください。
  2. マテリアライズド ビューの更新頻度を確認する
  3. マテリアライズド ビューの定義と、マテリアライズド ビューで参照されるデータを確認し、マテリアライズド ビューの使用を最適化する手法を検討します。