継続的マテリアライズド ビュー
このドキュメントでは、継続的マテリアライズド ビューの概要と一般的なユースケースについて説明します。このページを読む前に、Bigtable の概要を理解しておく必要があります。
Bigtable では、継続的マテリアライズド ビューは、継続的に実行される SQL クエリの事前に計算された結果を完全に管理するもので、継続的マテリアライズド ビューを増分的に更新します。SQL クエリには、基盤となる Bigtable テーブルに対する集計と変換を含めることができます。継続的マテリアライズド ビューを使用すると、パフォーマンスと効率を向上させることができます。
継続的マテリアライズド ビューのデータには、次のものが含まれます。
- ソーステーブルのデータから導出された集計値または変換値
- グループ化キーを定義する集計されていない値
継続的マテリアライズド ビューを使用すると、データを取り込むときにデータを事前集計できます。また、継続的マテリアライズド ビューはソーステーブルとは異なるスキーマを持ち、ソーステーブルで使用されるクエリとは異なるルックアップ パターンを持つクエリ用に最適化された構造でソーステーブル データを表示します。
Bigtable の継続的マテリアライズド ビューの主な特長は次のとおりです。
- メンテナンス不要: 継続的マテリアライズド ビューはバックグラウンドで事前に計算されます。更新や削除など、ソーステーブルのデータ変更は、ユーザーの操作を必要とせずに、バックグラウンドで継続的マテリアライズド ビューに自動的に反映されます。
- SQL 開発パターン: 継続的マテリアライズド ビューは、SQL 関数、フィルタ、集計などの Bigtable クエリの GoogleSQL に基づいています。
- ガベージ コレクションとの同期: 継続的マテリアライズド ビューは、ソーステーブルのガベージ コレクション ポリシーと同期し、テーブルデータが期限切れになったり削除されたりすると自動的に更新されます。
- 読み取りと書き込みのレイテンシに影響しない: インスタンスのクラスタが適切にプロビジョニングされているか、自動スケーリングを使用している場合、継続的マテリアライズド ビューはソーステーブルのパフォーマンスにほとんど影響しません。
- 結果整合性: 継続的マテリアライズド ビューはバックグラウンドで計算されます。継続的マテリアライズド ビューの更新は遅延する可能性がありますが、継続的マテリアライズドの結果は常に時間とともに整合性が保たれます。
継続的マテリアライズド ビューの定義に使用する行キー、列修飾子、列の値は、サービスデータとして扱われます。このため、機密情報を含む行キー、列修飾子、列の値を使用して、継続的マテリアライズド ビューを作成しないでください。サービスデータの取り扱いについては、Google Cloud のプライバシーに関するお知らせをご覧ください。
継続的マテリアライズド ビューは、Google Cloud CLI、 Google Cloud コンソールの Bigtable Studio クエリ エディタ、または Java と Go 用の Bigtable クライアント ライブラリを使用して作成できます。
次の方法で、継続的マテリアライズド ビューから読み取ることができます。
- Bigtable Studio クエリエディタ
- SQL クエリをサポートする Bigtable クライアント ライブラリ
- Java と Go 用の Bigtable クライアント ライブラリを使用した
ReadRows
API 呼び出し
詳細については、継続的マテリアライズド ビューからの読み取りをご覧ください。
継続的マテリアライズド ビューを使用する場合
継続的マテリアライズド ビューを使用すると、SQL を使用して Bigtable データの新しい表現を定義できます。作成された継続的マテリアライズド ビューは、ソーステーブルのデータを SQL クエリで定義された形式に継続的かつ自動的に再構築します。テーブルをクエリして、読み取った後にデータを変換または集計する代わりに、継続的マテリアライズド ビューをクエリできます。
継続的マテリアライズド ビューを使用すると、次のユースケースでクエリのパフォーマンスを向上させることができます。
- データの事前集計: 継続的マテリアライズド ビューを使用して、行間で受信データを集計できます。これにより、ダッシュボードの指標などの要約された集計データをすばやく取得できます。
- ラムダ アーキテクチャとカッパ アーキテクチャの自動化: アプリケーションで、リアルタイム ストリーミング パイプライン データと履歴データを含むバッチ パイプライン データの両方が必要な場合は、継続的マテリアライズド ビューを使用します。これらのビューは、基盤となるデータの変更を反映するために時間とともに更新されるすべてのデータソースのビューを提供します。追加のストリーム処理ツールやカスタム ETL ジョブは必要ありません。
- セカンダリ アクセス パターン: 継続的マテリアライズド ビューは、データの代替表現を作成します。この表現は、ソーステーブルに対するクエリで使用するルックアップ パターンとは異なるルックアップ パターンを使用するクエリ用に最適化できます。これらのパターンの詳細については、非同期セカンダリ インデックスを作成するをご覧ください。
継続的マテリアライズド ビューと他のタイプの Bigtable ビューを比較するには、テーブルとビューをご覧ください。
カウンタを使用する場合
データを事前集計する別の方法として、集計セルを使用して分散カウンタを作成する方法があります。
集計セルへの書き込みは、書き込み先のクラスタからすぐに読み取ることができます。継続的マテリアライズド ビューは、データの書き込み後に処理され、最終的にソーステーブルと整合性が取れます。
次の場合は、継続的マテリアライズド ビューではなくカウンタを使用します。
- フィルタを必要とせず、行をまたぐ必要のない集計
- 書き込み先のクラスタから書き込みをすぐに読み取る必要がある場合
継続的マテリアライズド ビューは、次の操作を行う場合に使用します。
- 集計に対するクエリ用に別のキーを生成する
- ベーステーブルの変更が集計に反映されることを確認する
- 複数の行のデータを自動的に結合する
次のようなユースケースでは、カウンタと継続的マテリアライズド ビューを組み合わせて使用します。
- 集計セルで新しい指標をキャプチャし、それらの指標の過去のロールアップを保持する
- 継続的マテリアライズド ビューで指標を結合する
リソースのプロビジョニングとパフォーマンス
継続的マテリアライズド ビューの継続的な処理は、優先度の低いバックグラウンド ジョブとして実行されます。そのため、クラスタのサイズが適切であれば、アプリケーションのパフォーマンスとソーステーブルの読み取り / 書き込みレイテンシへの影響は最小限に抑えられます。
継続的マテリアライズド ビューのデータを常に最新の状態に保つには、継続的マテリアライズド ビューを含むインスタンス内のクラスタで自動スケーリングを有効にすることをおすすめします。自動スケーリングでは、処理オーバーヘッドを処理するのに十分なノードが自動的に追加され、不要になると削除されます。これにより、継続的に実行される SQL クエリの実行中に十分なコンピューティング容量が確保されます。自動スケーリングにより、継続的マテリアライズド ビューのストレージ ニーズを処理するのに十分なノードを確保することもできます。
継続的マテリアライズド ビューは、インスタンスあたりのテーブル数 1,000 個の制限にカウントされます。
ストレージ
Bigtable は、継続的マテリアライズド ビューごとに次の情報を保存します。
- 継続的マテリアライズド ビューのデータ
- 中間ストレージ
他の Bigtable テーブルと同様に、継続的マテリアライズド ビューは、それを含むインスタンス内のすべてのクラスタに存在します。インスタンス内のクラスタには、ソーステーブルと、そのテーブルに基づく継続的マテリアライズド ビューを保存するのに十分なノードが必要です。自動スケーリングを使用すると、ストレージ要件の変化に応じてクラスタのサイズをスケールアップまたはスケールダウンできます。
継続的マテリアライズド ビューのストレージはソーステーブルとは異なりますが、継続的マテリアライズド ビューはソーステーブルと同じインスタンスに作成する必要があります。
継続的マテリアライズド ビューのストレージ
継続的マテリアライズド ビューには、継続的マテリアライズド ビューのベースとなる SQL クエリの結果データが含まれます。つまり、SQL クエリの集計句で定義された集計値と、グループ化キーを定義する集計されていない値が含まれます。
中間ストレージ
継続的マテリアライズド ビューとそのソーステーブルの同期をサポートするため、Bigtable は中間ストレージを使用して、継続的マテリアライズド ビューを増分更新するために必要なデータのコピーを保存します。
中間ストレージ内のデータ量は、継続的マテリアライズド ビューを定義する SQL クエリの結果を生成するためにソーステーブルでスキャンされるデータ量とほぼ同じです。たとえば、クエリがテーブル全体でデータを集計する場合、Bigtable はテーブル全体に相当するデータを中間ストレージに保持します。特定行キー範囲または列のクエリに基づく継続的マテリアライズド ビューは、中間ストレージにそれらの行または列のみを保持します。
中間ストレージは、ビューの増分更新を効率的にサポートし、ソーステーブルから継続的マテリアライズド ビューへの削除を伝播するために、継続的マテリアライズド ビューの存続期間中保持されます。中間ストレージ内のデータを読み取ることはできません。中間ストレージの使用状況に関する分析情報については、継続的マテリアライズド ビューの指標をご覧ください。
レプリケーション
レプリケーションを使用するインスタンスでは、テーブルと同じ方法で継続的マテリアライズド ビューが複製されません。代わりに、インスタンス内の各クラスタは、ソーステーブルの独自のコピーを使用して、継続的マテリアライズド ビューを個別に処理します。たとえば、クラスタ A のソーステーブルに書き込まれたデータは、クラスタ B のテーブルにレプリケートされ、クラスタ B の継続的マテリアライズド ビューにレプリケートされます。
料金
継続的マテリアライズド ビューの使用にリソースごとの費用はかかりません。ただし、継続的マテリアライズド ビューの作成と同期には処理とストレージが必要であり、標準料金が課金されます。継続的マテリアライズド ビューを作成すると、次の項目が増加します。
- ストレージ - 継続的マテリアライズド ビューへのデータの保存と中間ストレージに対して課金されます。詳細については、ストレージをご覧ください。
- コンピューティング - ソーステーブルと継続的マテリアライズド ビューの継続的な同期には CPU 処理が必要であり、追加のバックグラウンド作業を処理するためにクラスタに追加のノードが必要になる場合があります。
同時に、ソーステーブルの処理が減少することもあります。たとえば、データの範囲スキャンを実行して繰り返し計算や効率の悪いクエリを実行しなくなった場合などです。また、ソースデータを集計して Bigtable に書き戻すために、Dataflow や Spark などのパイプライン ジョブを実行する必要がなくなる場合もあります。
料金の詳細については、Bigtable の料金をご覧ください。継続的マテリアライズド ビューの使用状況をモニタリングするのに役立つ指標については、指標をご覧ください。
指標
継続的マテリアライズド ビューは、継続的マテリアライズド ビューのモニタリングに使用できるいくつかの重要な指標を Cloud Logging にレポートします。
指標 | 説明 |
---|---|
materialized_view/max_delay |
継続的マテリアライズド ビューの処理遅延の上限 |
materialized_view/storage |
継続的マテリアライズド ビューのストレージに使用されたデータ量(バイト単位) |
materialized_view/intermediate_storage |
継続的マテリアライズド ビューの中間処理で使用されるデータ量(バイト単位) |
table/materialized_view_intermediate_storage |
このテーブルで定義された継続的マテリアライズド ビューの中間処理で使用されるデータ量 |
materialized_view/user_errors |
継続的マテリアライズド ビューのユーザーデータのエラー数。ユーザー エラーにより、データがビューに伝播されません。 |
materialized_view/system_errors |
継続的マテリアライズド ビューのシステムからのエラー数 |
多くの Bigtable テーブル指標を使用して、継続的マテリアライズド ビューをモニタリングすることもできます。この場合、テーブル ID の代わりに継続的マテリアライズド ビュー ID を使用します。特に、継続的マテリアライズド ビューは CPU 指標の内訳に含まれており、その影響を把握するのに役立ちます。Data API の ReadRows
メソッドを使用して継続的マテリアライズド ビューを読み取ると、1 秒あたりのリクエスト数、レイテンシ、スループットに関する Bigtable 指標が生成されます。詳細については、指標をご覧ください。
Cloud Logging の使用を開始するには、ログのクエリと表示の概要をご覧ください。
制限事項
- テーブルごとに作成できる継続的マテリアライズド ビューは 1 つだけです。
_key
を指定せずにビューを作成する場合、ソーステーブルで選択された列はNULL
であってはなりません。詳細については、GROUP BY
句で定義された行キーをご覧ください。- 継続的マテリアライズド ビューを定義する SQL クエリは変更できません。継続的マテリアライズド ビューを削除し、変更内容を反映した新しいビューを作成する必要があります。
- 別の継続的マテリアライズド ビューまたは論理ビューの継続的マテリアライズド ビューを作成することはできません。
- 継続的マテリアライズド ビューのガベージ コレクション ポリシーを構成することはできません。すべてのデータ保持は、ソーステーブルのガベージ コレクション ポリシーによって管理され、ソースのガベージ コレクションは継続的マテリアライズド ビューに自動的に反映されます。
次のステップ
- 継続的なマテリアライズド ビューのクエリ
- 継続的マテリアライズド ビューを作成して管理する
- 非同期セカンダリ インデックスを作成する
- スキーマ設計のベスト プラクティス
- Bigtable の分散カウンタ