マテリアライズド ビューのトラブルシューティング

このドキュメントでは、BigQuery のマテリアライズド ビューに関連する一般的な問題(マテリアライズド ビューの作成時のエラー、更新の失敗、予期しないクエリ パフォーマンスなど)のトラブルシューティングについて説明します。

診断ワークフロー

マテリアライズド ビューの問題を調査する場合は、次の診断手順に沿って根本原因を特定します。

  1. テーブルの型とメタデータを確認する 。ターゲット テーブルがマテリアライズド ビューであることを確認し、構成オプションを確認します。

    SELECT
     table_name,
     table_type
    FROM
     `PROJECT_ID.DATASET`.INFORMATION_SCHEMA.TABLES
    WHERE
     table_name = 'MATERIALIZED_VIEW';

    次のように置き換えます。

    • PROJECT_ID: マテリアライズド ビューを含むプロジェクト。
    • DATASET: マテリアライズド ビューを含むデータセット。
    • MATERIALIZED_VIEW: マテリアライズド ビューの名前。

    enable_refreshrefresh_interval_minutesmax_staleness などの構成オプションを調べるには、 INFORMATION_SCHEMA.TABLE_OPTIONS ビューに対してクエリを実行します。

    SELECT
     table_name,
     option_name,
     option_value
    FROM
     `PROJECT_ID.DATASET`.INFORMATION_SCHEMA.TABLE_OPTIONS
    WHERE
     table_name = 'MATERIALIZED_VIEW';
  2. 最後の更新ステータスを確認するINFORMATION_SCHEMA.MATERIALIZED_VIEWS ビュー に対してクエリを実行して、ビューが最後に更新された日時と、最後の自動 更新でエラーが発生したかどうかを確認します。

    SELECT
     table_name,
     last_refresh_time,
     refresh_watermark,
     last_refresh_status
    FROM
     `PROJECT_ID.DATASET`.INFORMATION_SCHEMA.MATERIALIZED_VIEWS
    WHERE
     table_name = 'MATERIALIZED_VIEW';

    last_refresh_statusNULL でない場合、最後の自動更新ジョブが失敗しています。last_refresh_timeNULL または古い場合、マテリアライズド ビューは更新を正常に完了したことがないか、更新に失敗しています。

  3. 更新ジョブの履歴とエラーを調べるINFORMATION_SCHEMA.JOBS_BY_PROJECT ビュー に対してクエリを実行して、最近の自動更新ジョブを調べます。

    SELECT
     job_id,
     creation_time,
     end_time,
     state,
     error_result.reason AS error_reason,
     error_result.message AS error_message,
     total_slot_ms,
     total_bytes_processed
    FROM
     `region-REGION`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
    WHERE
     job_id LIKE '%materialized_view_refresh_%'
     AND creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
    ORDER BY
     creation_time DESC
    LIMIT 50;

    REGION は、データセットのリージョン(useurope-west3 など)に置き換えます。

  4. クエリの実行とスマート チューニングの統計情報を調べる 。クエリの実行速度が予想よりも遅い場合は、ジョブ統計情報の materialized_view_statistics フィールドを調べて、クエリ オプティマイザーがマテリアライズド ビューを使用したかどうかを確認します。

    SELECT
     job_id,
     total_slot_ms,
     total_bytes_billed,
     materialized_view_statistics
    FROM
     `region-REGION`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
    WHERE
     job_id = 'JOB_ID';

    JOB_ID は、クエリジョブ ID に置き換えます。

マテリアライズド ビューの作成エラーのトラブルシューティング

このセクションでは、マテリアライズド ビューの作成時に発生する可能性のあるエラー、その原因、解決手順について説明します。

サポートされていない SQL 演算子または構文

エラー メッセージ:

Unsupported operator in materialized view: KEYWORD

または

Materialized view queries do not support FEATURE

原因:

増分マテリアライズド ビューは、増分メンテナンスとスマート チューニングを有効にするために、SQL 構文の制限付きサブセットをサポートしています。マテリアライズド ビューを定義するクエリに、次のようなサポートされていない機能が含まれている場合、このエラーが発生することがあります。

  • 非確定的関数(CURRENT_TIMESTAMP()RAND()SESSION_USER() など)
  • OVER() を使用した分析ウィンドウ関数
  • ORDER BY 句または LIMIT
  • 集計なしの DISTINCT
  • WHERE 句または SELECT 句のサブクエリ
  • ユーザー定義関数(UDF)

解決策:

  • サポートされていない SQL 機能のリストを 確認します
  • クエリでより広範な SQL 機能が必要な場合は、 非増分マテリアライズド ビューallow_non_incremental_definition = trueに設定して max_staleness間隔を定義し、作成することを検討してください。

    CREATE MATERIALIZED VIEW `PROJECT_ID.DATASET.MATERIALIZED_VIEW`
    OPTIONS (
    enable_refresh = true,
    refresh_interval_minutes = 60,
    max_staleness = INTERVAL "4" HOUR,
    allow_non_incremental_definition = true
    ) AS
    SELECT
    ...

    次のように置き換えます。

    • PROJECT_ID: マテリアライズド ビューを含むプロジェクト。
    • DATASET: マテリアライズド ビューを含むデータセット。
    • MATERIALIZED_VIEW: マテリアライズド ビューの名前。

    非増分マテリアライズド ビューは、より広範な SQL クエリをサポートしますが、常に完全更新を実行し、スマート チューニングはサポートしていません。

  • 必要な SQL 構文が非増分マテリアライズド ビューでサポートされていない場合は、論理ビューまたは スケジュールされたクエリを使用して、結果を 宛先テーブルに書き込みます。

CDC ベーステーブルで max_staleness が無効

エラー メッセージ:

Materialized view PROJECT_ID:DATASET.MATERIALIZED_VIEW has a CDC table as base table PROJECT_ID:DATASET.TABLE but does not have valid max_staleness. Materialized views over CDC tables must have max_staleness set at least 2 times the base table's max_staleness: 0-0 0 0:0:0

原因:

変更データ キャプチャ(CDC)ベーステーブルにマテリアライズド ビューを作成する場合、マテリアライズド ビューの max_staleness オプションは、ベーステーブルの max_staleness 値の 2 倍以上の値に構成する必要があります。

解決策:

  1. ベース CDC テーブルの max_staleness 値を確認するには、 INFORMATION_SCHEMA.TABLE_OPTIONS ビューに対してクエリを実行します。
  2. マテリアライズド ビューの max_staleness オプションを、ベーステーブルの max_staleness 値の 2 倍以上の値に設定します。たとえば、ベース CDC テーブルの max_staleness 値が 15 分の場合、マテリアライズド ビューの max_staleness 値を 30 分以上に設定します。詳細については、GoogleSQL の データ定義言語(DDL)ステートメントの「ALTER MATERIALIZED VIEW SET OPTIONS ステートメント」をご覧ください。

パーティション分割されていないベーステーブル上のパーティション分割されたマテリアライズド ビュー

エラー メッセージ:

Partitioned incremental materialized view must be created on top of partitioned managed storage base table.

原因:

パーティション分割された増分マテリアライズド ビューを作成するには、基盤となるベーステーブルもパーティション分割されている必要があり、マテリアライズド ビューのパーティショニング列はベーステーブルのパーティショニング列と一致している必要があります。

解決策:

  • マテリアライズド ビューをパーティション分割する場合は、ベーステーブルがパーティション分割されていることを確認し、同じパーティショニング列を使用するようにマテリアライズド ビューを構成します。詳細については、 パーティションの配置をご覧ください。
  • ベーステーブルがパーティション分割されていない場合は、PARTITION BY 句なしでマテリアライズド ビューを作成します。
  • パーティション分割されていないテーブルにパーティション分割されたビューが必要な場合は、 非増分マテリアライズド ビューallow_non_incremental_definition = truemax_staleness を使用して作成します。 非増分マテリアライズド ビューでは、ベーステーブルとのパーティションの配置は必要ありません。

クロスリージョン データセット レプリカが読み取り専用

エラー メッセージ:

The dataset replica of the cross region dataset 'PROJECT_ID:DATASET' in region 'REGION' is read-only because it's not the primary replica.

原因:

クロスリージョン データセット レプリケーションを使用する場合、 セカンダリ レプリカは読み取り専用になります。セカンダリ レプリカ リージョンにマテリアライズド ビューを作成することはできません。

解決策:

複製されたデータセットのプライマリ リージョンにマテリアライズド ビューを作成します。 レプリカ リージョンにマテリアライズド ビューが必要な場合は、そのリージョンにマテリアライズド ビューのレプリカを作成します。詳細については、 マテリアライズド ビューのレプリカを管理するをご覧ください。

ベーステーブルの上限を超えている

エラー メッセージ:

Materialized views support at most 10 source tables, query has NUMBER_OF_SOURCE_TABLES

原因:

BigQuery マテリアライズド ビューは、最大 10 個のベーステーブル間の結合をサポートしています。

解決策:

マテリアライズド ビューを定義するクエリをリファクタリングして、10 個以下のベーステーブルを参照するようにします。アーキテクチャで 10 個を超えるテーブルを結合する必要がある場合は、 静的テーブルまたはディメンション テーブルを中間テーブルに事前結合するか、 スケジュールされたクエリまたは Dataform パイプラインを使用することを検討してください。

マテリアライズド ビューの作成中にリソースが超過した

エラー メッセージ:

Resources exceeded during query execution: The data accessed in this query is too large; consider accessing fewer tables, or for partitioned tables, fewer partitions.

原因:

マテリアライズド ビューを作成すると、BigQuery は最初の完全更新を実行してビューにデータを入力します。基盤となるベーステーブルに大量のパーティション分割されていないデータが含まれている場合や、ビューでカーディナリティの高い中間集計が生成される場合、最初の更新でスロットメモリまたはクエリの上限を超える可能性があります。

解決策:

  • マテリアライズド ビューの WHERE 句にフィルタ条件を追加して、スキャンするデータの範囲を必要なサブセットに制限します。
  • 更新中にパーティションをプルーニングするように、マテリアライズド ビューのパーティショニングをベーステーブルのパーティショニングと一致させます。
  • オンデマンド コンピューティングを使用している場合は、専用スロット 予約の BigQuery エディションを使用して、大規模な更新に十分なコンピューティング容量を確保することを検討してください。

BigLake テーブルとメタデータ キャッシュに関する問題

症状:

BigLake 外部テーブル のマテリアライズド ビューが作成中に失敗するか、更新に失敗します。

原因:

外部テーブルのマテリアライズド ビューには、特定のアーキテクチャ要件があります。

  • マテリアライズド ビューは、 メタデータ キャッシュが有効になっている BigLake テーブルでのみサポートされます。
  • マテリアライズド ビューの max_staleness 値は、基盤となる BigLake ベーステーブルの max_staleness 値よりも大きくする必要があります。
  • マテリアライズド ビューは、BigLake 外部テーブルまたは BigQuery マネージド ストレージ テーブルを参照できますが、1 つのマテリアライズド ビューで型を混在させることはできません。

解決策:

  1. 基盤となるすべての BigLake ベーステーブルでメタデータ キャッシュが有効になっていることを確認します。
  2. マテリアライズド ビューの max_staleness を、ベーステーブルのメタデータ キャッシュ間隔よりも大きい値に構成します。たとえば、ベーステーブルのキャッシュ間隔が 30 分の場合は、更新実行のバッファを確保するために、マテリアライズド ビューの max_staleness を 45 分以上に設定します。
  3. マテリアライズド ビューの 定義で、外部テーブルとマネージド テーブルを混在させないでください。

更新に関する問題のトラブルシューティング

このセクションでは、マテリアライズド ビューの更新の失敗とパフォーマンスの遅延の一般的な原因について説明します。

ベーステーブルのスキーマ変更(invalidQuery

症状:

INFORMATION_SCHEMA.MATERIALIZED_VIEWSlast_refresh_status 列に invalidQuery エラーが表示され、自動更新が停止します。

原因:

ベーステーブルのスキーマが変更された場合(マテリアライズド ビューで参照されている列の削除、列の名前変更、列のデータ型の変更など)、マテリアライズド ビューを定義する基盤となるクエリが無効になります。

解決策:

BigQuery では、既存のマテリアライズド ビューの列スキーマの変更はサポートされていません。スキーマの無効化を解決するには、次の操作を行います。

  1. CREATE OR REPLACE MATERIALIZED VIEW ステートメントを使用して、マテリアライズド ビューを再作成します。

    CREATE OR REPLACE MATERIALIZED VIEW `PROJECT_ID.DATASET.MATERIALIZED_VIEW`
    OPTIONS (
     enable_refresh = true,
     refresh_interval_minutes = 30
    ) AS
    SELECT
     ...

    次のように置き換えます。

    • PROJECT_ID: マテリアライズド ビューを含むプロジェクト。
    • DATASET: マテリアライズド ビューを含むデータセット。
    • MATERIALIZED_VIEW: マテリアライズド ビューの名前。
  2. 新しい定義が更新されたベーステーブルのスキーマと一致していることを確認します。

ベーステーブルのパーティションの有効期限、切り捨て、DML の変更

症状:

マテリアライズド ビューの更新が失敗するか、マテリアライズド ビューに対するクエリがベーステーブルにフォールバックして実行速度が低下します。

原因:

次のベーステーブル オペレーションは、既存のマテリアライズド ビューのデータを無効にします。

  • ベーステーブルまたはベーステーブル パーティションの切り捨て(TRUNCATE TABLE
  • ベーステーブルのパーティションの有効期限
  • パーティション分割されていないテーブルまたはセカンダリ結合されたベーステーブルに対する DELETE または MERGE データ操作言語(DML)ステートメント

これらのオペレーションが発生すると、影響を受けるパーティション(パーティション分割されていないテーブルの場合はマテリアライズド ビュー全体)が無効としてマークされます。

解決策:

  1. 手動で更新をトリガーして、マテリアライズド ビューを有効な状態に戻します。

    CALL BQ.REFRESH_MATERIALIZED_VIEW('PROJECT_ID.DATASET.MATERIALIZED_VIEW');
  2. DML ステートメントを実行するか、データを定期的に切り捨てるバッチ ETL パイプラインを実行する場合は、自動更新を無効にして、ETL パイプラインの最後に BQ.REFRESH_MATERIALIZED_VIEW を呼び出します。詳細については、 自動更新をご覧ください。

更新ジョブがタイムアウトする

症状:

更新ジョブが数時間(最大 12 時間)実行された後、タイムアウト エラーで失敗します。

原因:

ベーステーブルが大きくなるにつれて、更新中に処理されるデータ量が増加します。 マテリアライズド ビューのクエリで行をフィルタリングしない場合や、完全な無効化によりビューが増分更新を実行できない場合、更新ごとにベーステーブルの完全スキャンが必要となり、スロット時間が不足する可能性があります。

解決策:

  • マテリアライズド ビューの WHERE 句にフィルタ条件を追加して、不要な履歴データを制限します。
  • マテリアライズド ビューがベーステーブルとパーティション分割されていることを確認して、変更されたパーティションのみが増分更新されるようにします。
  • 更新ワークロードに対応できる十分な容量のスロット予約を割り当てます。

更新メッセージが重複している

メッセージ:

Materialized view is already being refreshed.

原因:

JOIN マテリアライズド ビューのベーステーブルが同時に更新された場合、または自動更新がすでに進行中に手動更新がトリガーされた場合、BigQuery は同時更新を検出し、重複するジョブをキャンセルします。

解決策:

これは正常な一時的な動作です。重複するジョブは、冗長な処理を防ぐために停止されます。重複する更新試行に対して課金されることはありません。 必要なご対応は特にありません。

ストリーミング データ(書き込みが最適化されたストレージ)の更新の遅延

症状:

高速ストリーミング データを含むベーステーブルに対するクエリがマテリアライズド ビューにすぐに表示されないか、クエリがベーステーブルにフォールバックします。

原因:

Storage Write API を使用して BigQuery にストリーミングされたデータは、最初に書き込みが最適化されたストレージ(ストリーミング バッファ)に保存されます。マテリアライズド ビューの更新ジョブは、データがコミットされ、ストリーミング バッファから最適化された列形式ストレージに変換された後にデータを処理します。

リアルタイムの整合性を維持するため、マテリアライズド ビューから読み取るクエリは、マテリアライズド ビューからコミットされたデータを読み取り、同時にベーステーブルのストリーミング バッファから差分を直接読み取ります。

解決策:

  • ストリーミング データでリアルタイムの読み取り整合性が必要な場合、クエリ プランナーはマテリアライズド ビューのデータとベーステーブルの差分を自動的に結合します。
  • リアルタイムの整合性が不要で、クエリごとにストリーミング バッファをスキャンしないようにする場合は、マテリアライズド ビューに max_staleness を設定します(例: max_staleness = INTERVAL "15" MINUTE)。これにより、クエリは差分処理を行わずに、事前計算されたマテリアライズド ビューから直接読み取ることができます。

クエリ パフォーマンスとスマート チューニングのトラブルシューティング

このセクションでは、クエリの実行速度が予想よりも遅い場合や、スマート チューニングが活用されない場合のトラブルシューティング方法について説明します。

スマート チューニングの使用状況を確認する

ベーステーブルに対してクエリを実行すると、パフォーマンスが向上し、費用が削減される場合、BigQuery はスマート チューニングを使用して、使用可能なマテリアライズド ビューを使用するようにクエリを自動的に書き換えます。

クエリでマテリアライズド ビューが使用されたかどうかを確認するには、クエリジョブの詳細の materialized_view_statistics フィールドを調べるか、 INFORMATION_SCHEMA.JOBS_BY_PROJECT ビューに対してクエリを実行します。

SELECT
  job_id,
  total_slot_ms,
  total_bytes_billed,
  mv.table_reference.dataset_id,
  mv.table_reference.table_id,
  mv.chosen,
  mv.rejected_reason
FROM
  `region-REGION`.INFORMATION_SCHEMA.JOBS_BY_PROJECT,
  UNNEST(materialized_view_statistics.materialized_view) AS mv
WHERE
  job_id = 'JOB_ID';

次のように置き換えます。

  • REGION: データセットのリージョン(useurope-west3 など)。
  • JOB_ID: クエリジョブ ID。

materialized_view_statistics オブジェクトの materialized_view 配列の各エントリには、次のフィールドが含まれています。

  • table_reference: マテリアライズド ビューの候補を識別します。
  • chosen: クエリ オプティマイザーが実行するマテリアライズド ビューを選択したかどうか(true)または拒否したかどうか(false)を示すブール値。
  • estimated_bytes_saved: マテリアライズド ビューを使用することでクエリがスキャンを回避した推定バイト数。
  • rejected_reason: chosenfalse の場合、オプティマイザーがマテリアライズド ビューを拒否した理由を指定します。

拒否の理由と rejected_reason 列挙型の詳細については、 マテリアライズド ビューが拒否された理由を確認するをご覧ください。

マテリアライズド ビューが拒否される一般的な理由

chosenfalse の場合は、rejected_reason の値を調べて原因を診断します。

rejected_reason の値 説明 解決策
NO_DATA マテリアライズド ビューがまだ更新されていないか、最初の更新が失敗したため、キャッシュにデータがありません。 CALL BQ.REFRESH_MATERIALIZED_VIEW(...) を使用して手動更新をトリガーします。
COST クエリ オプティマイザーは、マテリアライズド ビューに対してクエリを実行するよりも、ベーステーブルに対してクエリを実行する(またはクエリ キャッシュから読み取る)方が安価であると推定しました。 クエリのフィルタとパーティションを確認します。ベーステーブルのクエリが小さなパーティションのみをスキャンし、マテリアライズド ビューが複数のパーティションにまたがる場合、ベーステーブルに対して直接クエリを実行する方が効率的です。
BASE_TABLE_DATA_CHANGE 1 つ以上のベーステーブルのデータ変更により、構成された鮮度ウィンドウ外のキャッシュ データが無効になりました。 手動更新を実行するか、max_staleness を構成して、クエリがベーステーブルにフォールバックせずに古いデータを読み取れるようにします。
BASE_TABLE_TRUNCATED ベーステーブルが切り捨てられ、すべてのマテリアライズド ビューのデータが無効になりました。 データが再入力されたら、マテリアライズド ビューを更新します。
BASE_TABLE_EXPIRED_PARTITION ベーステーブルのパーティションの有効期限が切れました。 ベーステーブルとマテリアライズド ビューのパーティションの有効期限の設定が一致していることを確認し、ビューを更新します。
BASE_TABLE_PARTITION_EXPIRATION_CHANGE ベーステーブルのパーティションの有効期限が変更されました。 マテリアライズド ビューを更新して、パーティションの有効期限のメタデータを再調整します。
BASE_TABLE_INCOMPATIBLE_METADATA_CHANGE ベーステーブルでメタデータの変更(スキーマの変更など)が発生しました。 CREATE OR REPLACE MATERIALIZED VIEW を使用して、マテリアライズド ビューを再作成します。
BASE_TABLE_TOO_STALE ベーステーブルのキャッシュに保存されたメタデータ(BigLake 外部テーブルなど)が、許容されるしきい値よりも古くなっています。 外部テーブルのメタデータ キャッシュを更新します。
BASE_TABLE_FINE_GRAINED_SECURITY_POLICY クエリを実行するユーザーは、ベーステーブルの行レベルまたは列レベルのアクセス制御ポリシーに基づくアクセス権がありません。 IAM 権限とデータポリシーの付与を確認します。
TIME_ZONE 現在のクエリのタイムゾーンとは異なるタイムゾーンを使用してビューが更新されました。 環境と更新ジョブのタイムゾーンの設定を一致させます。

マテリアライズド ビューが考慮されない(クエリ構造の不一致)

マテリアライズド ビューが materialized_view_statistics に表示されない場合、クエリ オプティマイザーは構文解析中に、クエリパターンがマテリアライズド ビューの定義と一致しないと判断しました。

一般的な原因は次のとおりです。

  1. 集計またはフィルタの不一致 。クエリでは、マテリアライズド ビューの事前計算された集計から計算できない集計関数、グループ化列、フィルタ述語を使用します。
    • 解決策 __: クエリ とマテリアライズド ビューの定義の間で、集計関数とグループ化を一致させます。
  2. 非増分マテリアライズド ビューallow_non_incremental_definition = true で作成されたビューは、スマート チューニングをサポートしていません。
    • 解決策 __: 非増分マテリアライズド ビューに対して、 ビュー名を FROM 句で指定して直接クエリを実行します。
  3. 古いビューに対する直接クエリmax_staleness が設定されているマテリアライズド ビューに対して直接クエリを実行すると、クエリはベーステーブルからの差分処理を行わずに、max_staleness までの古い事前計算結果を返します。

互換性のない HyperLogLog スケッチ エラー

エラー メッセージ:

Invalid or incompatible sketch in HLL_COUNT.MERGE_PARTIAL

原因:

HLL_COUNT.INITHLL_COUNT.MERGE_PARTIAL などの近似集計関数を使用すると、BigQuery は HyperLogLog スケッチを使用します。クエリで指定された精度パラメータが、マテリアライズド ビューで定義された精度パラメータと一致しない場合、スケッチのマージ オペレーションは失敗します。

解決策:

精度パラメータ(HLL_COUNT.INIT(x, 12) など)が、マテリアライズド ビューの定義と、ビューを参照または書き換えるクエリの両方で同じであることを確認します。

ビューの変更とスキーマの変更に関するトラブルシューティング

このセクションでは、マテリアライズド ビューのスキーマまたはオプションを変更する際に発生する可能性のある問題について説明します。

マテリアライズド ビューのスキーマの編集

事象:

マテリアライズド ビューの列を ALTER TABLE または Google Cloud コンソールを使用して追加または変更しようとするとエラーが発生するか、[Edit Schema] オプション が使用できません。

原因:

BigQuery では、マテリアライズド ビューの列スキーマを直接変更することはできません。

解決策:

  • ALTER MATERIALIZED VIEW SET OPTIONS ステートメントを使用して、マテリアライズド ビューのオプション(enable_refreshrefresh_interval_minutesmax_staleness など)を変更できます。

    ALTER MATERIALIZED VIEW `PROJECT_ID.DATASET.MATERIALIZED_VIEW`
    SET OPTIONS (
    enable_refresh = true,
    refresh_interval_minutes = 20
    );

    次のように置き換えます。

    • PROJECT_ID: マテリアライズド ビューを含むプロジェクト。
    • DATASET: マテリアライズド ビューを含むデータセット。
    • MATERIALIZED_VIEW: マテリアライズド ビューの名前。
  • SQL クエリの定義を変更する、列を追加する、列のデータ型を変更するには、CREATE OR REPLACE MATERIALIZED VIEW を使用してビューを再作成します。

    CREATE OR REPLACE MATERIALIZED VIEW `PROJECT_ID.DATASET.MATERIALIZED_VIEW`
    AS SELECT
    ...

次のステップ