メインコンテンツまでスキップ
に最終更新

マテリアライズドビューの概要

マテリアライズドビューは、計算ロジックとデータの両方を保持するものです。計算ロジックのみを保存し、データを保持しない通常のビューとは異なり、マテリアライズドビューはポリシーに従ってデータを定期的またはリアルタイムに更新します。直接クエリを実行できるほか、クエリを透過的に書き換えることもできます。

はじめに確認すること​

マテリアライズドビューを選んで使用する前に、次の点を確認してください。

  • 解決したい問題は何ですか?クエリの高速化、データモデリング、レイクハウスの高速化のどれですか?
  • データの鮮度に対する要件はどの程度厳しいですか?強い整合性が必要ですか、それとも結果整合性で十分ですか?
  • 定義 SQL は単一テーブルを使用しますか、それとも複数テーブルを使用しますか?
  • 全量更新、パーティション単位の増分更新、リアルタイム更新のどれを使用しますか?

以下のセクションで、これらの点を順に説明します。

マテリアライズドビューのユースケース​

マテリアライズドビューは、定義 SQL に基づいてデータを計算・保存し、ポリシーに従ってデータを定期的またはリアルタイムに更新します。直接クエリを実行できるほか、クエリを透過的に書き換えることもできます。主なユースケースは次のとおりです。

クエリの高速化​

意思決定支援システム(BI レポートやアドホッククエリなど)の分析クエリには、通常、集計処理が含まれ、複数テーブルの結合が必要になることもあります。

  • このようなクエリの結果を計算するには多くのリソースが必要で、応答に数分かかる場合があります。
  • ビジネス上の用途では、数秒以内の応答が求められることがよくあります。
  • よく使うクエリを高速化するために、マテリアライズドビューを作成できます。

軽量 ETL(データモデリング)​

データを階層化する場合、ネストしたマテリアライズドビューを使用して DWD 層と DWM 層を構築し、マテリアライズドビューのスケジュール更新機能で一部の ETL タスクを置き換えることができます。

レイクハウス​

さまざまな外部データソースについて、それらのテーブルを基にマテリアライズドビューを作成すると、次のことが可能になります。

  • 外部テーブルから内部テーブルにデータを取り込むコストを削減できます。
  • 外部データソースに対するクエリを高速化できます。

マテリアライズドビューの分類​

マテリアライズドビューは、データの鮮度、SQL のパターン、更新方法の三つの観点から分類できます。

データの鮮度による分類:同期と非同期​

種類データの整合性典型的な鮮度直接クエリのサポート適用シナリオ
同期マテリアライズドビューベーステーブルと強い整合性を保つリアルタイム非対応高い鮮度が求められる場合
非同期マテリアライズドビューベーステーブルと結果整合性を保つT+1 / 毎時対応鮮度要件が比較的緩やかな一般的な分析用途

選択の指針:

  • 鮮度に対する要件が高い場合は、同期マテリアライズドビューを選びます。
  • 鮮度に対する要件が高くなく、多少の遅延を許容できる場合は、非同期マテリアライズドビューを選びます。

透過的なクエリ書き換えに対応する SQL パターンによる分類:単一テーブルと複数テーブル​

マテリアライズドビューの定義 SQL には、単一テーブルのクエリと複数テーブルのクエリがあります。使用するテーブルの数に応じて、単一テーブルのマテリアライズドビューと複数テーブルのマテリアライズドビューに分けられます。

  • 非同期マテリアライズドビュー:単一テーブルと複数テーブルの両方に対応します。
  • 同期マテリアライズドビュー:単一テーブルのみに対応します。

更新方法による分類:全量更新、パーティション単位の増分更新、リアルタイム更新​

マテリアライズドビューの種類によって、対応する更新方法は異なります。

マテリアライズドビューの種類全量更新パーティション単位の増分更新リアルタイム更新
非同期マテリアライズドビュー対応対応非対応
同期マテリアライズドビュー--対応

各更新方法の意味は次のとおりです。

  • 全量更新(非同期):マテリアライズドビューの定義 SQL に含まれるすべてのデータを計算します。
  • パーティション単位の増分更新(非同期):マテリアライズドビューのベーステーブルのパーティション内のデータが変化したとき、対応する変更対象のパーティションを特定し、マテリアライズドビュー全体を更新せずに、そのパーティションだけを更新します。
  • リアルタイム更新(同期):リアルタイムに更新され、データは常にベーステーブルと整合していると理解できます。