管理具體化檢視表建議

本文說明具體化檢視表建議工具的運作方式,以及如何查看及套用具體化檢視表建議。

簡介

BigQuery 具體化檢視表建議工具可協助您提升工作負載效能,並節省工作負載執行成本。這些建議是根據過去 30 天的查詢執行特性而定。

具體化檢視表是預先運算的檢視表,會定期快取查詢結果,以提高效能和效率。具體化檢視表會使用智慧微調,針對來源資料表透明地重新編寫查詢,以便使用現有的具體化檢視表,進而提升效能和效率。

推薦工具的運作方式

建議工具每天會為每個在 BigQuery 中執行查詢工作的專案產生建議。建議是根據過去 30 天的工作負載執行情況分析結果而產生。實體化檢視建議工具會尋找重複的查詢模式,並計算如果將重複的子查詢移至遞增實體化檢視,可節省多少費用。推薦工具會在查詢時考量任何節省的費用,以及具體化檢視區塊的帳戶維護成本。如果這些綜合因素顯示顯著的正面結果,推薦工具就會提出建議。

請參考以下查詢範例:

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 也是查詢中運算成本最高的部分。因此,如果針對不斷變更的來源資料表重複執行範例查詢,具體化檢視表建議工具可能會建議將 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 也會以洞察的形式,傳回查詢執行資訊。洞察是可協助您瞭解專案工作負載的發現,提供更多背景資訊,說明具體化檢視建議如何改善工作負載成本。

限制

事前準備

如要查看或套用 materialized view 建議,請先啟用 Recommender API

所需權限

如要取得存取具體化檢視表建議所需的權限,請要求管理員授予您 BigQuery 具體化檢視表建議工具檢視者 (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
下表說明 `recommendations` 回應中的重要欄位:

屬性 適用於子類型 說明
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:專案所在位置。
下表說明 `recommendations` 回應中的重要欄位:

屬性 適用於子類型 說明
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 觀察期間內,可使用具體化檢視表最佳化的重複模式查詢數量。

查看 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
+---------------------------------------------------+--------------------------------------------------------------------------------------------------+

詳情請參閱下列資源:

套用 materialized view 建議

您可以執行控制台中建議的 CREATE MATERIALIZED VIEW 類型 DDL 陳述式,套用建議來建立具體化檢視表。 Google Cloud

  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 個運算單元)。
  • 專案執行的查詢工作已使用具體化檢視表。

定價

查看建議不會產生任何費用,也不會對工作負載效能造成負面影響。

建立具體化檢視區塊來套用建議時,可能會產生儲存空間、維護和查詢費用。詳情請參閱「具體化檢視表定價」。