管理物化视图建议
本文档介绍了物化视图 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_suppkey
、s_name
、s_address
、s_phone
、total_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 不支持停用数据处理的标准流程。如需停止接收物化视图建议,请按照 Gemini in BigQuery 正式发布前注册表单中的说明操作。
- 物化视图建议无法导出到 BigQuery。
准备工作
您需要先启用 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 查看物化视图建议和数据分析。
从下列选项中选择一项:
控制台
在 Google Cloud 控制台中,转到 BigQuery 页面。
点击
建议。此时会打开 BigQuery 建议窗格。在降低 BigQuery 工作负载费用下,点击查看详情。
此时会出现一个建议列表,其中显示为当前项目生成的所有建议。如需详细了解特定具体化视图建议或表数据分析,请点击详细信息。
或者,您也可以点击侧边导航栏中的建议,查看适用于您的项目或组织的所有建议。
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 |
留待将来使用。 |
- 如需详细了解
recommendations
回答中的其他字段,请参阅 REST 资源:projects.locations.recommenders.recommendation
。 - 如需详细了解如何使用 Recommender API,请参阅使用 API - 建议。
如需使用 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
属性 | 针对子类型的相关性 | 说明 |
---|---|---|
content.queryCount |
CREATE_MATERIALIZED_VIEW |
观察期内具有重复模式(可使用物化视图进行优化)的查询数。 |
- 如需详细了解数据分析响应中的其他字段,请参阅 REST 资源:
projects.locations.insightTypes.insights
。 - 如需详细了解如何使用数据分析,请参阅使用 API - 数据分析。
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 |
留待将来使用。 |
- 如需详细了解
recommendations
回答中的其他字段,请参阅 REST 资源:projects.locations.recommenders.recommendation
。 - 如需详细了解如何使用 Recommender API,请参阅使用 API - 建议。
如需使用 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
:项目所在的位置。
属性 | 针对子类型的相关性 | 说明 |
---|---|---|
content.queryCount |
CREATE_MATERIALIZED_VIEW |
观察期内具有重复模式(可使用物化视图进行优化)的查询数。 |
- 如需详细了解数据分析响应中的其他字段,请参阅 REST 资源:
projects.locations.insightTypes.insights
。 - 如需详细了解如何使用数据分析,请参阅使用 API - 数据分析。
查看包含 INFORMATION_SCHEMA
的建议
您还可以使用 INFORMATION_SCHEMA
视图查看建议和数据分析。例如,您可以使用 INFORMATION_SCHEMA.RECOMMENDATIONS
视图根据槽节省量查看前三条建议,如以下示例所示:
+---------------------------------------------------+--------------------------------------------------------------------------------------------------+ | recommender | target_resources | est_gb_saved_monthly | slot_hours_saved_monthly | last_updated_time +---------------------------------------------------+--------------------------------------------------------------------------------------------------+ | google.bigquery.materializedview.Recommender | ["project_resource"] | 140805.38289248943 | 9613.139166666666 | 2024-07-01 13:00:00 | google.bigquery.table.PartitionClusterRecommender | ["table_resource_1"] | 4393.7416711859405 | 56.61476777777777 | 2024-07-01 13:00:00 | google.bigquery.table.PartitionClusterRecommender | ["table_resource_2"] | 3934.07264107652 | 10.499466666666667 | 2024-07-01 13:00:00 +---------------------------------------------------+--------------------------------------------------------------------------------------------------+
如需了解详情,请参阅以下资源:
INFORMATION_SCHEMA.RECOMMENDATIONS
视图INFORMATION_SCHEMA.RECOMMENDATIONS_BY_ORGANIZATION
视图INFORMATION_SCHEMA.INSIGHTS
视图
应用物化视图建议
您可以通过在 Google Cloud 控制台中执行建议的 CREATE MATERIALIZED VIEW
类型 DDL 语句,来应用建议创建物化视图。
在 Google Cloud 控制台中,转到 BigQuery 页面。
点击
建议。此时会打开 BigQuery 建议窗格。在降低 BigQuery 工作负载费用下,点击查看详情。
系统会显示建议列表,其中显示为当前项目或组织生成的所有建议,具体取决于所选范围。找到具体化视图建议,然后点击详细信息。
点击在 BigQuery Studio 中查看。此时会打开一个 SQL 编辑器,其中包含
CREATE MATERIALIZED VIEW
DDL 语句。在提供的
CREATE MATERIALIZED VIEW
语句中,使用唯一的物化视图名称修改MATERIALIZED_VIEW
占位符。运行
CREATE MATERIALIZED VIEW
DDL 语句以创建建议的物化视图。
排查建议问题
问题:特定表未显示任何建议。
在以下情况下,可能不会显示物化视图建议:
- 在项目执行的查询作业中没有任何周期性查询句式。
- 周期性查询句式不满足增量物化视图方面的限制,无法置于适合智能调优的物化视图中。
- 可能的物化视图会产生较高的维护费用。例如,源表经常通过数据操纵语言 (DML) 操作进行修改,因此物化视图将进行完全刷新,从而产生更多费用。
- 具有共同周期性句式的查询数量不足。
- 估算的每月节省微不足道(少于 1 个槽)。
- 由项目执行的查询作业已使用具体化视图。
价格
查看建议时,无需支付任何费用,也不会对工作负载性能产生负面影响。
通过创建具体化视图来应用建议时,可能会产生存储、维护和查询费用。如需了解详情,请参阅具体化视图价格。