監控具體化檢視表

您可以查看 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_processedtotal_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 = '<my-query-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. 請查看具體化檢視的定義和參照的資料,並考慮可改善具體化檢視用法的技巧