メインコンテンツまでスキップ

マテリアライズドビュー

標準ビューと同様に、マテリアライズドビューはクエリの結果であり、テーブルと同じ方法でアクセスします。 クエリごとに結果を再計算する標準ビューとは異なり、マテリアライズドビューは結果をキャッシュし、指定した間隔で更新します。 マテリアライズドビューは事前に計算されているため、マテリアライズドビューに対するクエリは、通常のビューよりもはるかに高速に実行できます。

A マテリアライズドビュー は、宣言型のパイプライン オブジェクトです。 これには、それを定義する クエリ 、更新する フロー 、および高速アクセスのためのキャッシュされた結果が含まれます。A マテリアライズドビュー:

  • アップストリーム データの変更を追跡します。
  • トリガー時に、変更されたデータを段階的に処理し、必要な変換を適用します。
  • 出力テーブルを、指定した更新間隔に基づいて、ソース・データと同期して維持します。

マテリアライズドビューは、多くの変換に適しています。

  • 推論は、行ではなくキャッシュされた結果に適用します。実際には、クエリを記述するだけです。
  • 彼らは常に正しいです。必要なデータはすべて、到着が遅れたり、順不同で到着した場合でも処理されます。
  • 多くの場合、増分です。 Databricks は、マテリアライズドビューの更新コストを最小限に抑える適切な戦略を選択しようとします。

マテリアライズドビューの仕組み

次の図は、マテリアライズドビューの仕組みを示しています。

マテリアライズドビューの仕組みを示す図

マテリアライズドビューは、1 つの DLT パイプラインによって定義および更新されます。 DLT パイプラインを作成するときは、パイプラインのソースコードでマテリアライズドビューを明示的に定義できます。パイプラインによって定義されたテーブルは、他のパイプラインで変更または更新することはできません。

Databricks SQLでパイプラインの外部にマテリアライズドビューを作成すると、Databricks によって非表示のDLTパイプラインが作成され、このパイプラインが更新され、このビューが更新されます。

Databricks は Unity Catalog を使用して、クエリや増分更新に使用される追加のシステム ビューなど、ビューに関するメタデータを格納します。キャッシュされたデータは、クラウドストレージにマテリアライズされます。

次の例では、2 つのテーブルを結合し、マテリアライズドビューを使用して結果を最新の状態に保ちます。

Python
import dlt

@dlt.table
def regional_sales():
partners_df = spark.read.table("partners")
sales_df = spark.read.table("sales")

return (
partners_df.join(sales_df, on="partner_id", how="inner")
)

メソッドで 1 つ以上の spark.readStream 呼び出しを使用すると、ビューがマテリアライズドビューではなく ストリーミングテーブル に変更されます。

自動更新

マテリアライズドビューを定義するパイプラインがトリガされると、ビューは自動的に最新の状態に保たれます (多くの場合、段階的に)。 Databricks は、マテリアライズドビューを最新の状態に保つために処理する必要があるデータのみの処理を試みます。 マテリアライズドビューは、クエリ結果を最初から完全に再計算する必要がある場合でも、常に正しい結果を表示しますが、多くの場合、Databricks はマテリアライズドビューに対して増分更新のみを行うため、完全な再計算よりもはるかにコストがかからない可能性があります。

次の図は、 clean_customersclean_transactionsという 2 つのアップストリームテーブルを結合し、国別にグループ化した結果である sales_reportというマテリアライズドビューを示しています。アップストリーム プロセスでは、3 か国 (米国、オランダ、英国) の clean_customers に 200 行が挿入され、これらの新しい顧客に対応する clean_transactions 5,000 行が更新されます。sales_report マテリアライズドビューは、新しい顧客または対応する取引がある国に対してのみ段階的に更新されます。この例では、売上レポート全体ではなく、3 つの行が更新されています。

マテリアライズドビュー 増分更新の例

マテリアライズドビューでの増分更新のしくみの詳細については、「 マテリアライズドビューの増分更新」を参照してください。

マテリアライズドビュー 制限事項

マテリアライズドビューには、次の制限があります。

  • 更新は正しいクエリを作成するため、入力に対する一部の変更では、マテリアライズドビューの完全な再計算が必要になり、コストがかかる場合があります。
  • これらは、低遅延のユースケース向けには設計されていません。マテリアライズドビューの更新の待ち時間は、ミリ秒単位ではなく、秒単位または分単位です。
  • すべての計算をインクリメンタルにコンピュートできるわけではありません。