マテリアライズド ビューの概要
このドキュメントでは、BigQuery でのマテリアライズド ビューのサポートの概要について説明します。このドキュメントを読む前に、BigQuery と BigQuery の論理ビューについて理解しておいてください。
概要
BigQuery のマテリアライズド ビューは事前に計算されたビューで、パフォーマンスと効率を向上させるためにクエリの結果を定期的にキャッシュに保存します。BigQuery は、事前に計算されたマテリアライズド ビューの結果を利用し、可能な場合にはベーステーブルからの差分のみを読み取って最新の結果を計算します。マテリアライズド ビューに直接クエリを発行できるのはもちろん、ベーステーブルに対するクエリを処理するために BigQuery オプティマイザーによってマテリアライズド ビューが使用される場合もあります。
マテリアライズド ビューを使用したクエリは通常、同じデータをベーステーブルのみから取得するクエリよりも高速で、消費するリソースも少なくて済みます。マテリアライズド ビューを使用すると、よく使うクエリを何度も繰り返し使用するような特性を持つワークロードのパフォーマンスを大幅に向上させることができます。
マテリアライズド ビューの主な特長は次のとおりです。
- メンテナンス不要。ベーステーブルが変更されるとバックグラウンドでマテリアライズド ビューが事前に計算されます。ベーステーブルのすべての増分データの変更が自動的にマテリアライズド ビューに追加されます。ユーザーが操作は必要ありません。
- 最新のデータ。マテリアライズド ビューは最新のデータを返します。ベーステーブルに対する変更によってマテリアライズド ビューが無効になる可能性がある場合、データはベーステーブルから直接読み取られます。ベーステーブルを変更してもマテリアライズド ビューが無効にならない場合、残りのデータはマテリアライズド ビューから読み取られ、ベーステーブルからは変更のみが読み取られます。
- スマートな調整。ベーステーブルに対するクエリの一部がマテリアライズド ビューへのクエリによって解決できる場合は、マテリアライズド ビューを使用するように BigQuery によってクエリのルートが変更され、パフォーマンスと効率が向上します。
ユースケース
マテリアライズド ビューでは、コンピューティング コストが高く、データセットの結果が小さいクエリを最適化できます。マテリアライズド ビューが有効なプロセスには、ETL(抽出、変換、ロード)処理やビジネス インテリジェンス(BI)パイプラインのように、予測可能なクエリを繰り返して大量の処理を必要とするオンライン分析処理(OLAP)オペレーションなどがあります。
次のユースケースでは、マテリアライズド ビューの価値が強調されます。マテリアライズド ビューを使用すると、次の処理が頻繁に必要となる場合にクエリのパフォーマンスを改善できます。
- データの事前集計。ストリーミング データの集計。
- データの事前フィルタリングテーブルの特定のサブセットのみを読み取るクエリを実行します。
- データの事前結合。クエリの結合、特に大きなテーブルと小さなテーブル間のクエリの結合。
- データの再クラスタ化ベーステーブルとは異なるクラスタリング スキームのメリットが見込まれるクエリを実行します。
他の BigQuery 技術との比較
次の表に、BigQuery のキャッシュ、スケジュールされたクエリ、論理ビュー、マテリアライズド ビューの類似点と相違点をまとめます。
コンポーネント | キャッシュ | スケジュールされたクエリ | 論理ビュー | マテリアライズド ビュー |
---|---|---|---|---|
コンピューティングの最適化 | はい | いいえ | いいえ | はい |
クエリのサポート | すべて | すべて | すべて | 限定的1 |
パーティショニングとクラスタリング | × | ○ | 該当なし | ○ |
増分更新 | × | いいえ | いいえ | ○ |
追加の保存 | × | ○ | いいえ | ○ |
クエリの書き換え | × | いいえ | いいえ | ○ |
メンテナンス費用 | × | ○ | 該当なし | ○ |
データ未更新 | なし | ○ | 無期限 | 省略可2 |
1 --allow_non_incremental_definition
オプションは、マテリアライズド ビューを作成するために拡張された範囲の SQL クエリをサポートしています。
2 --max_staleness
オプションは、大規模かつ頻繁に変更されるデータセットを処理する場合に、コストを管理しながら一貫した高パフォーマンスを実現します。
他の BigQuery 機能との連携
次の BigQuery の機能は、マテリアライズド ビューに対して透過的に機能します。
クエリプランの説明: クエリプランには、スキャンされたマテリアライズド ビュー(存在する場合)が反映され、マテリアライズド ビューとそのベーステーブルから読み取られたバイト数が示されます。
クエリのキャッシュ: マテリアライズド ビューを使用して書き換えられたクエリの結果は、通常の制限(確定関数の使用、ベーステーブルへのストリーミングなし、など)の下でキャッシュに保存できます。
コスト制限: 課金バイト数の上限を設定していて、クエリによって読み取られたバイト数がその上限を超えた場合は、そのクエリで使用されていたのがマテリアライズド ビュー、ベーステーブル、またはその両方かにかかわらず、クエリは課金されずに失敗します。
ドライランによるコストの見積もり: ドライランは、使用可能なマテリアライズド ビューを使用してクエリ書き換えロジックを繰り返し、コストを正確に見積もります。この機能は、特定のクエリでマテリアライズド ビューが使用されているかどうかを確認するために使用できます。
BigLake のメタデータ キャッシュ対応テーブル
BigLake のメタデータ キャッシュ対応テーブルに対するマテリアライズド ビューでは、Cloud Storage と Amazon Simple Storage Service(Amazon S3)に保存されている構造化データを参照できます。これらのマテリアライズド ビューは、BigQuery マネージド ストレージ テーブルに対するマテリアライズド ビューと同様に、自動更新とスマート チューニングの便益を含めて、機能します。その他のメリットとしては、BigQuery の外部に保存されているデータの事前集計、事前フィルタリング、事前結合などがあります。BigLake テーブルのマテリアライズド ビューは、BigQuery マネージド ストレージに保存され、このストレージのすべての特性を備えています。
Amazon S3 BigLake テーブルに対するマテリアライズド ビューを作成する場合、マテリアライズド ビューのデータは BigQuery データとの結合には使用できません。マテリアライズド ビューの Amazon S3 データを結合で使用できるようにするには、マテリアライズド ビューのレプリカを作成します。マテリアライズド ビューのレプリカは、承認済みマテリアル ビューにのみ作成できます。
マテリアライズド ビューのレプリカ
BigQuery では、Amazon Simple Storage Service(Amazon S3)、Apache Iceberg、Salesforce Data Cloud のデータに対して BigLake メタデータ キャッシュ対応テーブルでのマテリアライズド ビューを作成できます。
マテリアライズド ビューのレプリカを使用すると、下り(外向き)データの費用を回避し、クエリのパフォーマンスを向上させつつ、Amazon S3、Iceberg、Data Cloud のマテリアライズド ビューのデータをクエリで使用できるようになります。マテリアライズド ビューのレプリカでは、サポートされている BigQuery リージョンのデータセットに Amazon S3、Iceberg、Data Cloud のデータを複製して、BigQuery がローカルでデータを使用できるようにすることでこれを実現します。
マテリアライズド ビューのレプリカを作成する方法を学習する。
データの更新速度
マテリアライズド ビューのレプリカを作成すると、レプリケーション プロセスはソースのマテリアライズド ビューへの変更をポーリングし、データをマテリアライズド ビューのレプリカに複製します。データは、CREATE MATERIALIZED VIEW AS REPLICA OF
ステートメントの replication_interval_seconds
オプションで指定した間隔で複製されます。
マテリアライズド ビューのレプリカデータの更新頻度は、レプリケーション間隔に加えて、ソース マテリアライズド ビューの更新頻度と、マテリアライズド ビューの更新に使用される Amazon S3、Iceberg、Data Cloud テーブルのメタデータ キャッシュの更新頻度にも影響されます。
マテリアライズド ビューのレプリカのデータの更新頻度と、マテリアライズド ビューのベースとなっているリソースは、以下のように Google Cloud コンソールを使用して確認できます。
- マテリアライズド ビューのレプリカの更新頻度については、マテリアライズド ビューのレプリカの [詳細] ペインで [最終更新日] フィールドを確認します。
- ソース マテリアライズド ビューの更新頻度については、マテリアライズド ビューの [詳細] ペインで [最終更新日] フィールドを確認します。
- ソース Amazon S3、Iceberg、または Data Cloud テーブルのメタデータ キャッシュの更新頻度については、マテリアライズド ビューの [詳細] ペインで [最大未更新] フィールドを確認します。
サポートされているリージョン
マテリアライズド ビューのレプリカを作成する場合は、次の表のロケーション マッピングを使用します。
ソース マテリアライズド ビューのロケーション | マテリアライズド ビューのレプリカのロケーション |
---|---|
aws-us-east-1 |
US
マルチリージョン、または次のいずれかのリージョン。
|
aws-us-west-2 |
US
マルチリージョン、または次のいずれかのリージョン。
|
aws-eu-west-1 |
EU
マルチリージョン、または次のいずれかのリージョン。
|
aws-ap-northeast-2 |
次のいずれかのリージョン:
|
aws-ap-southeast-2 |
次のいずれかのリージョン:
|
制限事項
- ベーステーブルの参照制限などの制限が適用される場合があります。マテリアライズド ビューの上限の詳細については、割り当てと上限をご覧ください。
- マテリアライズド ビューのデータを
COPY
、EXPORT
、LOAD
、WRITE
、データ操作言語(DML)ステートメントなどのオペレーションで直接更新したり、操作することはできません。 - 既存のマテリアライズド ビューを、同じ名前のマテリアライズド ビューで置き換えることはできません。
- マテリアライズド ビューの作成後にビュー SQL の更新はできません。
- マテリアライズド ビューは、ベーステーブルと同じ組織に存在する必要があります。プロジェクトが組織に属していない場合は、同じプロジェクト内に存在する必要があります。
- スマートな調整では、同じデータセットからのマテリアライズド ビューのみが考慮されます。
- マテリアライズド ビューは、制限付き SQL 構文と一部の集計関数を使用します。詳細については、サポートされているマテリアライズド ビューをご覧ください。
- マテリアライズド ビューを他のマテリアライズド ビューにネストすることはできません。
- マテリアライズド ビューでは、外部テーブルまたはワイルドカード テーブル、論理ビュー1、スナップショット、あるいは変更データ キャプチャが有効なテーブルに対してクエリを実行することはできません。
- マテリアライズド ビューでは、GoogleSQL 言語のみがサポートされています。
- マテリアライズド ビューの説明を設定できますが、マテリアライズド ビュー内の個々の列には説明を設定できません。
- 先にマテリアライズド ビューを削除せずにベーステーブルを削除すると、マテリアライズド ビューのクエリと更新は失敗します。ベーステーブルを再作成する場合は、マテリアライズド ビューも再作成する必要があります。
1 論理ビューの参照はプレビュー版でサポートされています。詳細については、論理ビューを参照するをご覧ください。
BigLake テーブルのマテリアライズド ビューの制限事項
- マテリアライズド ビューのパーティショニングはサポートされていません。ベーステーブルでは Hive パーティショニングを使用できますが、マテリアライズド ビューのストレージは BigLake テーブル内でパーティショニングできません。つまり、ベーステーブルを削除すると、マテリアライズド ビューは完全に更新されます。詳細については、増分アップデートをご覧ください。
- マテリアライズド ビューの
-max_staleness
オプションの値は、BigLake ベーステーブルの値よりも大きくする必要があります。 - BigQuery マネージド テーブルと BigLake テーブルの間の結合は、単一のマテリアライズド ビューの定義ではサポートされていません。
マテリアライズド ビューのレプリカの制限事項
- 行レベルのセキュリティまたは列レベルのセキュリティを使用するテーブルに基づくマテリアライズド ビューに対して、マテリアライズド ビューのレプリカは作成できません。
- ソース マテリアライズド ビューまたはマテリアライズド ビューのレプリカで顧客管理の暗号鍵(CMEK)を使用することはできません。
- マテリアライズド ビューのレプリカは、メタデータ キャッシュを使用するテーブルに基づくマテリアライズド ビューに対してのみ作成できます。
- 特定のソース マテリアライズド ビューに対して作成できるマテリアライズド ビューのレプリカは 1 つだけです。
- マテリアライズド ビューのレプリカは、承認済みのマテリアライズド ビューに対してのみ作成できます。
マテリアライズド ビューの料金
マテリアライズド ビューで次の操作を行うと費用が発生します。
- マテリアライズド ビューに対するクエリ。
- マテリアライズド ビューのメンテナンス(マテリアライズド ビューの更新時など)。自動更新の費用はビューが存在するプロジェクトに請求されます。手動更新の費用は、手動更新ジョブが実行されたプロジェクトに請求されます。メンテナンス費用の管理については、ジョブのメンテナンスの更新をご覧ください。
- マテリアライズド ビュー テーブルの保存。
コンポーネント | オンデマンド料金 | 容量ベースの料金 |
---|---|---|
クエリ | マテリアライズド ビューとベーステーブルの必要な部分によって処理されたバイト数。1 | スロットはクエリの実行中に消費されます。 |
メンテナンス | 更新時に処理されたバイト数。 | スロットは更新時に使用されます。 |
ストレージ | マテリアライズド ビューに保存されているバイト数。 | マテリアライズド ビューに保存されているバイト数。 |
1 可能な場合、BigQuery はビューが最後に更新された時点以降の変更のみを読み取ります。詳細については、増分更新をご覧ください。
保存料金の詳細
マテリアライズド ビューの AVG
、ARRAY_AGG
、APPROX_COUNT_DISTINCT
の各集計値は、最終的な値が直接保存されるわけではありません。その代わりに、最終的な値を生成するための中間的な「スケッチ」として、BigQuery の内部にマテリアライズド ビューが保存されます。
例として、次のコマンドで作成されたマテリアライズド ビューについて考えてみます。
CREATE MATERIALIZED VIEW project-id.my_dataset.my_mv_table AS SELECT date, AVG(net_paid) AS avg_paid FROM project-id.my_dataset.my_base_table GROUP BY date
avg_paid
列は NUMERIC
または FLOAT64
としてユーザーに表示されますが、内部的には BYTES
として保存され、その内容は独自形式の中間的なスケッチになります。データサイズの計算では、この列は BYTES
として扱われます。
マテリアライズド ビューのレプリカの費用
マテリアライズド ビューのレプリカを使用すると、コンピューティング、送信データ転送、ストレージの費用が発生します。