监控具体化视图

您可以通过查看 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 = '';

如需查看某个具体化视图在一段时间内的使用情况,请查询 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;