標準ビューと同様に、具体化されたビューはクエリの結果であり、テーブルと同じようにアクセスします。 すべてのクエリで結果を再計算する標準ビューとは異なり、具体化されたビューは結果をキャッシュし、指定された間隔で更新します。 具体化されたビューは事前計算されるため、それに対するクエリは通常のビューに対するクエリよりもはるかに高速に実行できます。
具体化されたビューは、宣言型パイプライン オブジェクトです。 これには、それを定義する クエリ 、更新する フロー 、高速アクセスのためのキャッシュされた結果が含まれます。 具体化されたビュー:
- アップストリーム データの変更を追跡します。
- トリガー時に、変更されたデータを段階的に処理し、必要な変換を適用します。
- 指定した更新間隔に基づいて、ソース データと同期して出力テーブルを維持します。
具体化されたビューは、多くの変換に適しています。
- 行ではなく、キャッシュされた結果に対して推論を適用します。 実際には、クエリを記述するだけです。
- これらは常に正しいです。 遅れて到着した場合や順序が外れた場合でも、必要なすべてのデータが処理されます。
- 多くの場合、増分型です。 Databricks は、具体化されたビューを更新するコストを最小限に抑える適切な戦略を選択しようとします。
具体化されたビューのしくみ
次の図は、具体化されたビューのしくみを示しています。
具体化されたビューは、1 つのパイプラインによって定義および更新されます。 パイプラインのソース コードで具体化されたビューを明示的に定義できます。 パイプラインによって定義されたテーブルは、他のパイプラインでは変更または更新できません。
注
Databricks SQL を使用してパイプラインの外部で具体化されたビューを作成すると、Azure Databricks によって、ビューの更新に使用されるパイプラインが作成されます。 ワークスペースの左側のナビゲーションから [ジョブ] と [パイプライン ] を選択すると、パイプラインを表示できます。 [ パイプラインの種類 ] 列をビューに追加できます。 パイプラインで定義された具体化されたビューには、 ETLの種類があります。 Databricks SQL で作成された具体化されたビューには、 MV/STの種類があります。
Databricks では、Unity カタログを使用して、増分更新に使用されるクエリや追加のシステム ビューなど、ビューに関するメタデータを格納します。 キャッシュされたデータはクラウド ストレージに具体化されます。
次の例では、2 つのテーブルを結合し、具体化されたビューを使用して結果を最新の状態に保ちます。
Python
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")
)
SQL
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 つの行が更新されています。
具体化されたビューでの増分更新のしくみの詳細については、「具体化されたビュー の増分更新」を参照してください。
具体化されたビューの制限事項
具体化されたビューには、次の制限があります。
- 更新によって正しいクエリが作成されるため、入力に対する一部の変更には具体化されたビューの完全な再計算が必要になるため、コストがかかる可能性があります。
- 待機時間の短いユース ケース向けに設計されていません。 具体化されたビューの更新の待機時間は、ミリ秒ではなく秒単位または分単位です。
- すべての計算を増分計算できるわけではありません。