マテリアライズド ビューのトラブルシューティング
このドキュメントは、BigQuery のマテリアライズド ビューに関連する一般的な問題(マテリアライズド ビューの作成時のエラー、更新の失敗、予期しないクエリ パフォーマンスなど)のトラブルシューティングに役立ちます。
診断ワークフロー
マテリアライズド ビューに関する問題を調査する場合は、次の診断手順に沿って根本原因を特定します。
テーブルのタイプとメタデータを確認します。ターゲット テーブルがマテリアライズド ビューであることを確認し、構成オプションを確認します。
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';
最終更新ステータスを確認します。
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または古い場合、マテリアライズド ビューは更新を正常に完了したことがないか、更新に失敗しています。更新ジョブの履歴とエラーを検査する。
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など)に置き換えます。クエリ実行とスマート チューニングの統計情報を確認する。クエリの実行速度が想定よりも遅い場合は、ジョブ統計の
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 倍以上の値に構成する必要があります。
解決策:
INFORMATION_SCHEMA.TABLE_OPTIONSビューをクエリして、ベース CDC テーブルのmax_staleness値を確認します。- マテリアライズド ビューの
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 マネージド ストレージ テーブルを参照できますが、単一のマテリアライズド ビューで型を混在させることはできません。
解決策:
- 基盤となるすべての BigLake ベーステーブルでメタデータのキャッシュ保存が有効になっていることを確認します。
- マテリアライズド ビューの
max_stalenessを、ベーステーブルのメタデータ キャッシュ間隔よりも大きい値に構成します。たとえば、ベーステーブルのキャッシュ間隔が 30 分の場合、更新実行用のバッファを確保するために、マテリアライズド ビューのmax_stalenessを 45 分以上に設定します。 - マテリアライズド ビューの定義で外部テーブルとマネージド テーブルを混在させないでください。
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 では、既存のマテリアライズド ビューの列スキーマの変更はサポートされていません。スキーマの無効化を解決するには、次の操作を行います。
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: マテリアライズド ビューの名前。
新しい定義が更新されたベーステーブルのスキーマと一致していることを確認します。
ベーステーブルのパーティションの有効期限切れ、切り捨て、DML 変更
症状:
マテリアライズド ビューの更新が失敗するか、マテリアライズド ビューに対するクエリがベーステーブルにフォールバックして実行速度が低下します。
原因:
次のベーステーブル オペレーションは、既存のマテリアライズド ビューデータを無効にします。
- ベーステーブルまたはベーステーブル パーティションの切り捨て(
TRUNCATE TABLE) - ベーステーブルのパーティションの有効期限
- パーティショニングされていないテーブルまたはセカンダリ結合ベーステーブルに対する
DELETEまたはMERGEデータ操作言語(DML)ステートメント
これらのオペレーションが発生すると、影響を受けるパーティション(またはパーティション分割されていないテーブルの場合はマテリアライズド ビュー全体)が無効としてマークされます。
解決策:
更新を手動でトリガーして、マテリアライズド ビューを有効な状態に戻します。
CALL BQ.REFRESH_MATERIALIZED_VIEW('PROJECT_ID.DATASET.MATERIALIZED_VIEW');
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 にリストされていない場合、クエリ オプティマイザーは構文解析中に、クエリパターンがマテリアライズド ビューの定義と一致しないと判断しました。
一般的な原因は次のとおりです。
- 集計またはフィルタの不一致。クエリで、マテリアライズド ビューの事前計算された集計から計算できない集計関数、グループ化列、フィルタ述語が使用されている。
- 解決策: クエリとマテリアライズド ビュー定義の間で、集計関数とグループ化を調整します。
- 非増分マテリアライズド ビュー。
allow_non_incremental_definition = trueで作成されたビューは、スマート チューニングをサポートしていません。- 解決策:
FROM句でビュー名を指定して、非増分マテリアライズド ビューを直接クエリします。
- 解決策:
- 古いビューに対する直接クエリ。
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 ...
次のステップ
- マテリアライズド ビューを作成する方法を学習する。
- マテリアライズド ビューとスマート チューニングを使用する方法を学習する。
- マテリアライズド ビューを管理して更新する方法を確認する。
- マテリアライズド ビューの更新と使用状況をモニタリングする方法を確認する。
- 一般的なクエリ パフォーマンスの問題のトラブルシューティング方法を確認する。