マテリアライズド ビューの推奨事項を管理する

このドキュメントでは、マテリアライズド ビューの Recommender の仕組みと、マテリアライズド ビューの推奨事項を表示して適用する方法について説明します。

はじめに

BigQuery マテリアライズド ビュー Recommender は、ワークロードのパフォーマンス向上と実行コストの削減に役立ちます。これらの推奨事項は、過去 30 日間のクエリ実行の特徴に基づいています。

マテリアライズド ビューは事前に計算されたビューで、パフォーマンスと効率を向上させるためにクエリの結果を定期的にキャッシュに保存します。マテリアライズド ビューは、スマート チューニングを使用して、ソーステーブルに対するクエリを透過的に書き換え、既存のマテリアライズド ビューを使用してパフォーマンスと効率を向上させます。

Recommender の仕組み

Recommender は、BigQuery でクエリジョブを実行するプロジェクトごとに推奨事項を毎日生成します。推奨事項は、過去 30 日間のワークロード実行の分析に基づいています。マテリアライズド ビューの 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

この例は、上位のサプライヤーに関する情報を表示するクエリです。このクエリには、サプライヤー(l_suppkey)ごとの総収益を表す revenue という共通テーブル式(CTE)が含まれ、サプライヤーの total_revenue がサプライヤー全体の max(total_revenue) と一致する場合に、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 マテリアライズド ビュー Recommender 閲覧者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)
次の表に、insights 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: プロジェクトのロケーション。
次の表に、insights API レスポンスの重要なフィールドを示します。

プロパティ サブタイプに関連 説明
content.queryCount CREATE_MATERIALIZED_VIEW 観測期間中にマテリアライズド ビューによって最適化可能な反復パターンのクエリの数。

INFORMATION_SCHEMA で推奨事項を表示する

INFORMATION_SCHEMA ビューを使用して、推奨事項と分析情報を表示することもできます。たとえば、次の例のように、INFORMATION_SCHEMA.RECOMMENDATIONS ビューを使用して、スロットの節約に基づいて上位 3 つの推奨事項を表示できます。

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

詳しくは、次のリソースをご覧ください。

マテリアライズド ビューの推奨事項を適用する

マテリアライズド ビューを作成するための推奨事項を適用するには、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 か月あたりの推定削減額が少なすぎる(1 スロット未満)。
  • プロジェクトで実行されるクエリジョブで、すでにマテリアライズド ビューが使用されている。

料金

推奨事項を表示する際に、費用やワークロードのパフォーマンスへの悪影響が発生することはありません。

マテリアライズド ビューを作成して推奨事項を適用すると、ストレージ、メンテナンス、クエリの費用が発生する可能性があります。詳細については、マテリアライズド ビューの料金をご覧ください。