管理具体化视图建议

本文档介绍了具体化视图 Recommender 的工作原理,还介绍了如何查看和应用任何具体化视图建议。

简介

BigQuery 具体化视图 Recommender 可帮助您提高工作负载性能并节省工作负载执行费用。这些建议基于过去 30 天内的历史查询执行特征。

具体化视图是预计算视图,可定期缓存查询结果以提高性能和效率。具体化视图使用智能调整以透明方式重写针对源表的查询,以使用现有具体化视图来提高性能和效率。

Recommender 的工作原理

Recommender 每天为在 BigQuery 中执行查询作业的每个项目生成建议。建议基于过去 30 天的工作负载执行情况分析。具体化视图 Recommender 会查找重复的查询模式,并计算将重复子查询移动到增量具体化视图时可以节省的费用。Recommender 会考虑查询时节省的任何费用以及具体化视图的维护费用。如果这些综合因素显示出显著的积极结果,则 Recommender 会提出建议。

请思考以下查询示例:

WITH revenue   AS
(SELECT l_suppkey as supplier_no,
        sum(l_extendedprice * (1 - l_discount)) as total_revenue
  FROM lineitem
  WHERE
    l_shipdate >= date '1996-01-01'
    AND l_shipdate < date_add(date '1996-01-01', interval 3 MONTH)
  GROUP BY l_suppkey)
SELECT s_suppkey,
      s_name,
      s_address,
      s_phone,
      total_revenue
FROM
supplier,
revenue
WHERE s_suppkey = supplier_no
AND total_revenue =
  (SELECT max(total_revenue)
    FROM revenue)
ORDER BY s_suppkey

此查询示例显示了主要供应商的相关信息。该查询包含一个名为 revenue 的通用表表达式 (CTE),表示每个供应商的总收入 (l_suppkey)。 revenue 将与供应商表联接,条件是供应商的 total_revenue 在所有供应商中均与 max(total_revenue) 匹配。因此,该查询会计算具有最高总收入的供应商的信息(l_suppkeys_names_addresss_phonetotal_revenue)。

整个查询本身过于复杂,无法放入增量具体化视图中。但是,supplier CTE 是对单个表的聚合,这是一种增量具体化视图支持的查询模式。supplier CTE 也是查询中计算开销最高的部分。因此,如果针对不断更改的源表反复运行示例查询,则具体化视图 Recommender 可能会建议将 supplier CTE 放入具体化视图中。上述示例查询的具体化视图建议可能类似于以下内容:

CREATE MATERIALIZED VIEW mv AS
SELECT l_suppkey as supplier_no,
         sum(l_extendedprice * (1 - l_discount)) as total_revenue
  FROM lineitem
  WHERE
    l_shipdate >= date '1996-01-01'
    AND l_shipdate < date_add(date '1996-01-01', interval 3 MONTH)
  GROUP BY l_suppkey

Recommender API 还会以数据分析的形式返回查询执行信息。数据分析是帮助您了解项目的工作负载的发现结果,提供了有关具体化视图建议如何优化工作负载费用的更多背景信息。

限制

准备工作

您需要先启用 Recommender API,然后才能查看或应用具体化视图建议。

所需权限

如需获得访问具体化视图建议所需的权限,请让管理员向您授予 BigQuery Materialized View Recommender Viewer (roles/recommender.bigqueryMaterializedViewViewer) IAM 角色。 如需详细了解如何授予角色,请参阅管理访问权限

此预定义角色可提供访问具体化视图建议所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需访问具体化视图建议,您需要具备以下权限:

  • recommender.bigqueryMaterializedViewRecommendations.get
  • recommender.bigqueryMaterializedViewRecommendations.list

您也可以使用自定义角色或其他预定义角色来获取这些权限。

如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅 IAM 简介

查看具体化视图建议

本部分介绍如何使用 Google Cloud 控制台、Google Cloud CLI 或 Recommender API 查看具体化视图建议和数据分析。

从下列选项中选择一项:

控制台

  1. 在 Google Cloud 控制台中,转到 BigQuery 页面。

    转到 BigQuery

  2. 点击 建议

    点击“建议”以查看所有建议。

  3. 此时会打开 BigQuery 建议窗格。在降低 BigQuery 工作负载费用下,点击查看详细信息

    查看详细信息以查看所有 BigQuery 建议

  4. 此时会显示一个建议列表,其中显示了为当前项目生成的所有建议。此列表中的每条建议都会显示采纳建议后大致节省的费用。如需详细了解特定具体化视图建议或表数据分析,请点击详细信息

gcloud

如需查看特定项目的具体化视图建议,请使用 gcloud recommender recommendations list 命令

gcloud recommender recommendations list \
    --project=PROJECT_NAME \
    --location=REGION_NAME \
    --recommender=google.bigquery.materializedview.Recommender \
    --format=FORMAT_TYPE \

替换以下内容:

  • PROJECT_NAME:执行查询作业的项目的名称
  • REGION_NAME:在其中执行查询作业的区域
  • FORMAT_TYPE:支持的 gcloud CLI 输出格式,例如 JSON
下表介绍了“建议”回答中的重要字段:

属性 与子类型相关 说明
recommenderSubtype CREATE_MATERIALIZED_VIEW 建议的类型。
content.overview.sql CREATE_MATERIALIZED_VIEW 用于创建具体化视图的建议 DDL 语句。
content.overview.slotMsSavedMonthly CREATE_MATERIALIZED_VIEW 建议的视图每月节省的槽毫秒数估算值。
content.overview.bytesSavedMonthly CREATE_MATERIALIZED_VIEW 根据建议的视图,每月扫描节省的估算字节数。
content.overview.baseTables CREATE_MATERIALIZED_VIEW 留待将来使用。

如需使用 gcloud CLI 查看提示具体化视图建议的数据分析,请使用 gcloud recommender insights list 命令

gcloud recommender insights list \
    --project=PROJECT_NAME \
    --location=REGION_NAME \
    --insight-type=google.bigquery.materializedview.Insight \
    --format=FORMAT_TYPE \

替换以下内容:

  • PROJECT_NAME:执行查询作业的项目的名称
  • REGION_NAME:在其中执行查询作业的区域
  • FORMAT_TYPE:支持的 gcloud CLI 输出格式,例如 JSON
下表介绍了数据分析 API 响应中的重要字段:

属性 与子类型相关 说明
content.queryCount CREATE_MATERIALIZED_VIEW 观察期内具有重复模式(可使用具体化视图进行优化)的查询数。

REST API

如需查看特定项目的具体化视图建议,请使用 REST API。您必须在每个命令中提供一个身份验证令牌,该令牌可使用 gcloud CLI 获取。如需详细了解如何获取身份验证令牌,请参阅获取 ID 令牌的方法

您可以使用 curl list 请求查看特定项目的所有建议:

$ curl
-H "Authorization: Bearer $(gcloud auth print-access-token)"
-H "x-goog-user-project: PROJECT_NAME" https://recommender.googleapis.com/v1/projects/PROJECT_NAME/locations/LOCATION/recommenders/google.bigquery.materializedview.Recommender/recommendations

替换以下内容:

  • PROJECT_NAME:包含 BigQuery 表的项目的名称
  • LOCATION:项目所在的位置。
下表介绍了“建议”回答中的重要字段:

属性 与子类型相关 说明
recommenderSubtype CREATE_MATERIALIZED_VIEW 建议的类型。
content.overview.sql CREATE_MATERIALIZED_VIEW 用于创建具体化视图的建议 DDL 语句。
content.overview.slotMsSavedMonthly CREATE_MATERIALIZED_VIEW 建议的视图每月节省的槽毫秒数估算值。
content.overview.bytesSavedMonthly CREATE_MATERIALIZED_VIEW 根据建议的视图,每月扫描节省的估算字节数。
content.overview.baseTables CREATE_MATERIALIZED_VIEW 留待将来使用。

如需使用 REST API 查看提示具体化视图建议的数据分析,请运行以下命令:

$ curl
-H "Authorization: Bearer $(gcloud auth print-access-token)"
-H "x-goog-user-project: PROJECT_NAME" https://recommender.googleapis.com/v1/projects/PROJECT_NAME/locations/LOCATION/insightTypes/google.bigquery.materializedview.Insight/insights

替换以下内容:

  • PROJECT_NAME:包含 BigQuery 表的项目的名称
  • LOCATION:项目所在的位置。
下表介绍了数据分析 API 响应中的重要字段:

属性 与子类型相关 说明
content.queryCount CREATE_MATERIALIZED_VIEW 观察期内具有重复模式(可使用具体化视图进行优化)的查询数。

应用具体化视图建议

您可以通过在 Google Cloud 控制台中执行建议的 CREATE MATERIALIZED VIEW 类型 DDL 语句来应用建议以创建具体化视图。

  1. 在 Google Cloud 控制台中,转到 BigQuery 页面。

    转到 BigQuery

  2. 点击 建议

    点击“建议”以查看所有建议。

  3. 此时会打开 BigQuery 建议窗格。在降低 BigQuery 工作负载费用下,点击查看详细信息

    查看详细信息以查看所有 BigQuery 建议

  4. 此时会显示一个建议列表,其中显示了为当前项目生成的所有建议。找到具体化视图建议,然后点击详细信息

  5. 点击在 BigQuery Studio 中查看。此时将打开一个 SQL 编辑器,其中包含 CREATE MATERIALIZED VIEW DDL 语句。

  6. 在提供的 CREATE MATERIALIZED VIEW 语句中,使用唯一具体化视图名称修改 MATERIALIZED_VIEW 占位符。

  7. 运行 CREATE MATERIALIZED VIEW DDL 语句以创建建议的具体化视图。

排查建议问题

问题:特定表未显示任何建议。

在以下情况下,可能不会显示具体化视图建议:

  • 在项目执行的查询作业中没有任何周期性查询模式。
  • 周期性查询模式不满足增量具体化视图的限制,并且不能放入适合智能调整的具体化视图中。
  • 潜在具体化视图的维护费用较高。例如,源表通常由数据操纵语言 (DML) 操作修改,因此具体化视图将完全刷新,从而产生额外费用。
  • 具有常见周期性模式的查询数量不足。
  • 估算的每月节省微不足道(少于 1 个槽)。
  • 项目执行的查询作业已在使用具体化视图。

价格

查看建议时,无需支付任何费用,也不会对工作负载性能产生负面影响。

通过创建具体化视图来应用建议时,可能会产生存储、维护和查询费用。如需了解详情,请参阅具体化视图价格