查看分区和聚类建议

本文档介绍了分区和聚类 Recommender 的工作原理,以及如何查看建议和数据分析。

BigQuery 分区和聚类 Recommender 会生成分区聚类建议以优化 BigQuery 表。Recommender 会基于 BigQuery 表分析工作流,并提供建议,以便您使用表分区或表聚类更好地优化工作流和查询费用。

如需详细了解 Recommender 服务,请参阅 Recommender 概览

Recommender 的工作原理

为了生成建议,分区和聚类 Recommender 会使用项目过去 30 天内的工作负载执行数据来分析每个 BigQuery 表,以获取欠佳分区和聚类配置。Recommender 还会使用机器学习来预测可以使用不同分区或聚类配置优化工作负载执行的程度。如果 Recommender 发现对表进行分区或聚类可显著节省费用,则 Recommender 会生成建议。分区和聚类 Recommender 会生成以下类型的建议:

现有表类型 建议子类型 建议示例
非分区、非聚类 分区 “通过按 DAY 对 column_C 进行分区,每月可节省约 64 个小时的槽时间”
非分区、非聚类 集群 “通过对 column_C 进行聚类,每月可节省约 64 个小时的槽时间”
分区、非聚类 集群 “通过对 column_C 进行聚类,每月可节省约 64 个小时的槽时间”

每条建议由三部分组成:

  • 对特定表进行分区或聚类的指导
  • 要对其进行分区或聚类的表中的特定列
  • 预计每月节省的应用建议的费用

为了计算工作负载可能节省的费用,Recommender 假定过去 30 天内的历史执行工作负载数据代表未来的工作负载。

Recommender API 还会以数据分析的形式返回表工作负载信息。数据分析是帮助您了解项目的工作负载的发现结果,提供了有关分区或聚类建议如何优化工作负载费用的更多背景信息。

限制

分区和聚类 Recommender 会在其分析中排除旧版 SQL 查询。

分区和聚簇 Recommender 不支持存储在以下区域中的资源:

  • europe-central2, europe-west8, europe-west9, europe-west12, europe-north1, europe-southwest1
  • us-east1us-east5us-south1
  • me-central1me-central2me-west1
  • australia-southeast2
  • southamerica-west1

准备工作

您需要先启用 Recommender API,然后才能查看分区和聚类建议。

所需权限

如需获得访问分区和聚类建议所需的权限,请让您的管理员为您授予 BigQuery Partitioning Clustering Recommender Viewer (roles/recommender.bigqueryPartitionClusterViewer) IAM 角色。 如需详细了解如何授予角色,请参阅管理访问权限

此预定义角色可提供访问分区和聚类建议所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需访问分区和聚类建议,您需要拥有以下权限:

  • recommender.bigqueryPartitionClusterRecommendations.get
  • recommender.bigqueryPartitionClusterRecommendations.list

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

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

查看建议

本部分介绍如何使用 Google Cloud 控制台、Google Cloud CLI 或 Recommender API 查看分区和聚类建议和数据分析。

从下列选项中选择一项:

控制台

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

    转到 BigQuery

  2. 如需打开“建议”标签页,请点击 建议 > 查看所有建议

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

    “建议”标签页列出了您的项目可用的所有建议。

  3. 降低 BigQuery 工作负载费用面板中,点击查看全部

    费用建议表列出了为当前项目生成的所有建议。例如,以下屏幕截图显示 Recommender 分析了 example_table 表,然后建议对 example_column 列进行聚类以节省大致的字节数和槽数。

    包含分区和聚类建议的推荐表。

  4. 如需详细了解表数据分析和建议,请点击具体的建议。

gcloud

如需查看特定项目的分区或聚类建议,请使用 gcloud recommender recommendations list 命令

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

请替换以下内容:

  • PROJECT_NAME:包含 BigQuery 表的项目的名称
  • REGION_NAME:项目所在的区域
  • FORMAT_TYPE:支持的 gcloud CLI 输出格式,例如 JSON
下表介绍了 Recommender API 响应中的重要字段:

属性 与子类型相关 说明
recommenderSubtype 分区或聚类 表示建议的类型。
content.overview.partitionColumn 分区 建议的分区列名称。
content.overview.partitionTimeUnit 分区 建议的分区时间单位。例如,DAY 表示建议在建议的列上具有每日分区。
content.overview.clusterColumns 集群 建议的聚类列名称。

如需使用 gcloud CLI 查看表数据分析,请使用 gcloud recommender insights list 命令

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

请替换以下内容:

  • PROJECT_NAME:包含 BigQuery 表的项目的名称
  • REGION_NAME:项目所在的区域
  • FORMAT_TYPE:支持的 gcloud CLI 输出格式,例如 JSON
下表介绍了数据分析 API 响应中的重要字段:

属性 与子类型相关 说明
content.existingPartitionColumn 集群 现有分区列(如果有)
content.tableSizeTb 全部 表的大小(以 TB 为单位)
content.bytesReadMonthly 全部 从表中读取的每月字节数
content.slotMsConsumedMonthly 全部 表上运行的工作负载每月使用的槽毫秒数
content.queryJobsCountMonthly 全部 表上运行的作业的每月计数

REST API

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

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

curl
    -H "Authorization: Bearer $GCLOUD_AUTH_TOKEN"
    -H "x-goog-user-project: PROJECT_NAME" https://recommender.googleapis.com/v1/projects/my-project/locations/us/recommenders/google.bigquery.table.PartitionClusterRecommender/recommendations

请替换以下内容:

  • GCLOUD_AUTH_TOKEN:有效的 gcloud CLI 访问令牌的名称
  • PROJECT_NAME:包含 BigQuery 表的项目的名称
下表介绍了 Recommender API 响应中的重要字段:

属性 与子类型相关 说明
recommenderSubtype 分区或聚类 表示建议的类型。
content.overview.partitionColumn 分区 建议的分区列名称。
content.overview.partitionTimeUnit 分区 建议的分区时间单位。例如,DAY 表示建议在建议的列上具有每日分区。
content.overview.clusterColumns 集群 建议的聚类列名称。

如需使用 REST API 查看表数据分析,请运行以下命令:

curl
-H "Authorization: Bearer $GCLOUD_AUTH_TOKEN"
-H "x-goog-user-project: PROJECT_NAME" https://recommender.googleapis.com/v1/projects/my-project/locations/us/insightTypes/google.bigquery.table.StatsInsight/insights

替换以下内容:

  • GCLOUD_AUTH_TOKEN:有效的 gcloud CLI 访问令牌的名称
  • PROJECT_NAME:包含 BigQuery 表的项目的名称
下表介绍了数据分析 API 响应中的重要字段:

属性 与子类型相关 说明
content.existingPartitionColumn 集群 现有分区列(如果有)
content.tableSizeTb 全部 表的大小(以 TB 为单位)
content.bytesReadMonthly 全部 从表中读取的每月字节数
content.slotMsConsumedMonthly 全部 表上运行的工作负载每月使用的槽毫秒数
content.queryJobsCountMonthly 全部 表上运行的作业的每月计数

问题排查

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

在以下情况下,可能不会显示分区和聚类建议:

  • 该表小于 10 GB。
  • 该表因数据操纵语言 (DML) 操作而产生较高的写入费用。
  • 该表在过去 30 天内没有被读取。
  • 估算的每月节省微不足道(少于 1 槽小时)。
  • 该表已进行聚类。

价格

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

后续步骤