マテリアライズドビュー
プレビュー
この機能は パブリック プレビュー段階です。
標準ビューと同様、マテリアライズドビューはクエリの結果であり、テーブルと同じ方法でアクセスします。 クエリごとに結果を再計算する標準ビューとは異なり、マテリアライズドビューは結果をキャッシュし、指定された間隔で結果を更新します。 マテリアライズドビューは事前に計算されているため、それに対するクエリは通常のビューに対するクエリよりもはるかに高速に実行できます。
マテリアライズドビューは、宣言型のパイプライン オブジェクトです。 これには、それを定義する クエリ 、それを更新するためのフロー、および高速アクセス用のキャッシュされた結果が含まれます。マテリアライズドビュー:
- アップストリーム データの変更を追跡します。
- トリガーされると、変更されたデータを増分的に処理し、必要な変換を適用します。
- 指定された更新間隔に基づいて、ソース データと同期した出力テーブルを維持します。
マテリアライズドビューは、多くの変換に適しています。
- 行ではなくキャッシュされた結果に対して推論を適用します。実際には、クエリを書くだけです。
- 彼らは常に正しいです。必要なデータは、遅れて到着したり順序が間違っていたりしても、すべて処理されます。
- 多くの場合、増分です。 Databricks は、マテリアライズドビューの更新コストを最小限に抑える適切な戦略を選択しようとします。
マテリアライズドビューの仕組み
次の図は、マテリアライズドビューの仕組みを示しています。
マテリアライズドビューは単一のパイプラインによって定義および更新されます。 マテリアライズドビューはパイプラインのソースコード内で明示的に定義できます。 パイプラインによって定義されたテーブルは、他のパイプラインによって変更または更新することはできません。
Databricks SQLを使用してパイプラインの外側にマテリアライズドビューを作成すると、 Databricksビューの更新に使用されるパイプラインを作成します。 ワークスペースの左側のナビゲーションから [ジョブとパイプライン] を 選択すると、パイプラインを表示できます。 ビューに パイプライン タイプ 列を追加できます。LakeFlow宣言型パイプラインで作成されたマテリアライズドビューのタイプはETL
です。 Databricks SQLで作成されたマテリアライズドビューの型はMV/ST
です。
Databricks は、Unity Catalog を使用して、増分更新に使用されるクエリや追加のシステム ビューなど、ビューに関するメタデータを保存します。キャッシュされたデータはクラウド ストレージに具体化されます。
次の例では、2 つのテーブルを結合し、マテリアライズドビューを使用して結果を最新の状態に保ちます。
- Python
- SQL
from pyspark import pipelines as dp
@dp.materialized_view
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")
)
CREATE OR REPLACE MATERIALIZED VIEW regional_sales
AS SELECT *
FROM partners
INNER JOIN sales ON
partners.partner_id = sales.partner_id;
自動増分更新
マテリアライズドビューを定義するパイプラインがトリガーされると、ビューは自動的に (多くの場合は増分的に) 最新の状態に保たれます。 Databricks 、マテリアライズドビューを最新の状態に保つために処理する必要があるデータのみの処理を試みます。 マテリアライズドビューは、クエリ結果を最初から完全に再計算する必要がある場合でも、常に正しい結果を表示しますが、多くの場合、 Databricksマテリアライズドビューに対して増分更新のみを行うため、完全な再計算よりもはるかにコストが低くなります。
以下の図は、 sales_report
というマテリアライズドビューを示しています。これは、 clean_customers
とclean_transactions
という 2 つの上流テーブルを結合し、国ごとにグループ化した結果です。 上流のプロセスでは、3 か国 (米国、オランダ、英国) のclean_customers
に 200 行が挿入され、これらの新規顧客に対応するclean_transactions
の 5,000 行が更新されます。sales_report
マテリアライズドビューは、新しい顧客または対応する取引がある国のみについて段階的に更新されます。 この例では、売上レポート全体ではなく、 3 行が更新されています。
マテリアライズドビューでの増分更新の仕組みの詳細については、 「マテリアライズドビューの増分更新」を参照してください。
マテリアライズドビューの制限
マテリアライズドビューには次の制限があります。
- 更新により正しいクエリが作成されるため、入力への一部の変更にはマテリアライズドビューの完全な再計算が必要となり、コストがかかる可能性があります。
- 低レイテンシのユースケース向けには設計されていません。マテリアライズドビューの更新の待ち時間はミリ秒ではなく、秒または分単位です。
- すべての計算を段階的にコンピュートできるわけではありません。