マテリアライズドビューの概要
マテリアライズドビューは、計算ロジックとデータの両方を保持するものです。計算ロジックのみを保存し、データを保持しない通常のビューとは異なり、マテリアライズドビューはポリシーに従ってデータを定期的またはリアルタイムに更新します。直接クエリを実行できるほか、クエリを透過的に書き換えることもできます。
はじめに確認すること
マテリアライズドビューを選んで使用する前に、次の点を確認してください。
- 解決したい問題は何ですか?クエリの高速化、データモデリング、レイクハウスの高速化のどれですか?
- データの鮮度に対する要件はどの程度厳しいですか?強い整合性が必要ですか、それとも結果整合性で十分ですか?
- 定義 SQL は単一テーブルを使用しますか、それとも複数テーブルを使用しますか?
- 全量更新、パーティション単位の増分更新、リアルタイム更新のどれを使用しますか?
以下のセクションで、これらの点を順に説明します。
マテリアライズドビューのユースケース
マテリアライズドビューは、定義 SQL に基づいてデータを計算・保存し、ポリシーに従ってデータを定期的またはリアルタイムに更新します。直接クエリを実行できるほか、クエリを透過的に書き換えることもできます。主なユースケースは次のとおりです。
クエリの高速化
意思決定支援システム(BI レポートやアドホッククエリなど)の分析クエリには、通常、集計処理が含まれ、複数テーブルの結合が必要になることもあります。
- このようなクエリの結果を計算するには多くのリソースが必要で、応答に数分かかる場合があります。
- ビジネス上の用途では、数秒以内の応答が求められることがよくあります。
- よく使うクエリを高速化するために、マテリアライズドビューを作成できます。
軽量 ETL(データモデリング)
データを階層化する場合、ネストしたマテリアライズドビューを使用して DWD 層と DWM 層を構築し、マテリアライズドビューのスケジュール更新機能で一部の ETL タスクを置き換えることができます。
レイクハウス
さまざまな外部データソースについて、それらのテーブルを基にマテリアライズドビューを作成すると、次のことが可能になります。
- 外部テーブルから内部テーブルにデータを取り込むコストを削減できます。
- 外部データソースに対するクエリを高速化できます。
マテリアライズドビューの分類
マテリアライズドビューは、データの鮮度、SQL のパターン、更新方法の三つの観点から分類できます。
データの鮮度による分類:同期と非同期
| 種類 | データの整合性 | 典型的な鮮度 | 直接クエリのサポート | 適用シナリオ |
|---|---|---|---|---|
| 同期マテリアライズドビュー | ベーステーブルと強い整合性を保つ | リアルタイム | 非対応 | 高い鮮度が求められる場合 |
| 非同期マテリアライズドビュー | ベーステーブルと結果整合性を保つ | T+1 / 毎時 | 対応 | 鮮度要件が比較的緩やかな一般的な分析用途 |
選択の指針:
- 鮮度に対する要件が高い場合は、同期マテリアライズドビューを選びます。
- 鮮度に対する要件が高くなく、多少の遅延を許容できる場合は、非同期マテリアライズドビューを選びます。
透過的なクエリ書き換えに対応する SQL パターンによる分類:単一テーブルと複数テーブル
マテリアライズドビューの定義 SQL には、単一テーブルのクエリと複数テーブルのクエリがあります。使用するテーブルの数に応じて、単一テーブルのマテリアライズドビューと複数テーブルのマテリアライズドビューに分けられます。
- 非同期マテリアライズドビュー:単一テーブルと複数テーブルの両方に対応します。
- 同期マテリアライズドビュー:単一テーブルのみに対応します。
更新方法による分類:全量更新、パーティション単位の増分更新、リアルタイム更新
マテリアライズドビューの種類によって、対応する更新方法は異なります。
| マテリアライズドビューの種類 | 全量更新 | パーティション単位の増分更新 | リアルタイム更新 |
|---|---|---|---|
| 非同期マテリアライズドビュー | 対応 | 対応 | 非対応 |
| 同期マテリアライズドビュー | - | - | 対応 |
各更新方法の意味は次のとおりです。
- 全量更新(非同期):マテリアライズドビューの定義 SQL に含まれるすべてのデータを計算します。
- パーティション単位の増分更新(非同期):マテリアライズドビューのベーステーブルのパーティション内のデータが変化したとき、対応する変更対象のパーティションを特定し、マテリアライズドビュー全体を更新せずに、そのパーティションだけを更新します。
- リアルタイム更新(同期):リアルタイムに更新され、データは常にベーステーブルと整合していると理解できます。