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

このドキュメントは、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_refresh、refresh_interval_minutes、max_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_status が NULL でない場合、最後の自動更新ジョブは失敗しています。last_refresh_time が NULL または古い場合、マテリアライズド ビューは更新を正常に完了したことがないか、更新に失敗しています。

  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 は、データセットのリージョン(us、europe-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. INFORMATION_SCHEMA.TABLE_OPTIONS ビューをクエリして、ベース CDC テーブルの max_staleness 値を確認します。
  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 = true と max_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. 基盤となるすべての BigLake ベーステーブルでメタデータのキャッシュ保存が有効になっていることを確認します。
  2. マテリアライズド ビューの max_staleness を、ベーステーブルのメタデータ キャッシュ間隔よりも大きい値に構成します。たとえば、ベーステーブルのキャッシュ間隔が 30 分の場合、更新実行用のバッファを確保するために、マテリアライズド ビューの max_staleness を 45 分以上に設定します。
  3. マテリアライズド ビューの定義で外部テーブルとマネージド テーブルを混在させないでください。

INFORMATION_SCHEMA ビューへの参照

エラー メッセージ:

Illegal operation on INFORMATION_SCHEMA view: PROJECT_ID:DATASET_OR_REGION.INFORMATION_SCHEMA.VIEW_NAME

クエリする INFORMATION_SCHEMA ビューと指定するオプションによっては、次のような一般的なマテリアライズド ビューの検証エラーが返されることがあります。

Unsupported operator in materialized view: KEYWORD

または

Materialized view queries do not support FEATURE

または

Materialized views cannot reference logical views.

原因:

INFORMATION_SCHEMA ビューを直接的または間接的に参照する増分マテリアライズド ビューまたは非増分マテリアライズド ビューを作成することはできません。INFORMATION_SCHEMA ビューは、サポートされているベーステーブルではなく、システム生成のメタデータ ビューであるため、BigQuery はマテリアライズド ビューのメタデータを関連付けたり、ベーステーブルの変更を追跡したりできません。

BigQuery は、クエリ プランニング中に INFORMATION_SCHEMA ビューを基盤となる内部ビューとシステム テーブルの定義に展開するため、作成が失敗すると次の動作が発生する可能性があります。

  • Illegal operation on INFORMATION_SCHEMA view エラー メッセージでは、クエリで指定した INFORMATION_SCHEMA ビュー名の代わりに、VIEW_NAME に内部システム テーブル名(_HASH_JOBS_DELETE など)が表示されることがあります。
  • 増分マテリアライズド ビューの場合、BigQuery は、基本テーブルのサポートを確認する前に、INFORMATION_SCHEMA ビューの拡張された内部 SQL 定義を検証します。その内部定義に増分マテリアライズド ビューでサポートされていない SQL 構文または関数が含まれている場合、クエリは最初に サポートされていない SQL 演算子または構文エラーで失敗します。

解決策:

  • 事前計算されたストレージが不要な場合は、INFORMATION_SCHEMA ビューに対して直接クエリを実行するか、INFORMATION_SCHEMA ビューの上に標準の論理ビューを作成します。
  • INFORMATION_SCHEMA メタデータをマテリアライズする必要がある場合(たとえば、過去のメタデータを保持したり、クエリのパフォーマンスを向上させたりする場合)、CREATE TABLE AS SELECT ステートメントまたはスケジュールされたクエリを使用して、クエリ結果を標準の BigQuery テーブルに書き込みます。その後、その標準テーブルに対して直接クエリを実行するか、その上にマテリアライズド ビューを作成できます。

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

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

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

症状:

INFORMATION_SCHEMA.MATERIALIZED_VIEWS の last_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: データセットのリージョン(us や europe-west3 など)。
  • JOB_ID: クエリジョブ ID。

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

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

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

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

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

解決策:

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

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

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

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

事象:

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

原因:

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

解決策:

  • ALTER MATERIALIZED VIEW SET OPTIONS ステートメントを使用すると、マテリアライズド ビューのオプション(enable_refresh、refresh_interval_minutes、max_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
    ...

次のステップ