メトリクス ビューのマテリアライゼーション
実験段階
この機能は試験的なものです。
メトリクス ビューのマテリアライゼーションは、事前コンピュート集計にマテリアライズドビューを使用することでクエリを高速化します。 LakeFlow Spark宣言型パイプラインは、特定のメトリクス ビューに対してユーザー定義のマテリアライズドビューを調整し、クエリ時に、クエリ オプティマイザーが自動集計認識クエリ マッチング (クエリ再書き込み) を使用してクエリを最適なマテリアライズドビューにインテリジェントにルーティングします。 このアプローチでは、どの集計テーブルをクエリするかを決定したり、個別の本番運用パイプラインを管理したりする必要がなく、自動増分更新が提供されます。
概要
メトリクスビューのマテリアライゼーションは、マテリアライゼーションの定義と、それに対するクエリの実行という2つのフェーズで構成されます。
定義フェーズ
マテリアライゼーションを使用してメトリクス ビューを定義する場合、 CREATE METRIC VIEWまたはALTER METRIC VIEWディメンション、メジャー、更新スケジュールを指定します。 Databricksは、マテリアライズドビューを管理するマネージドパイプラインを作成します。

パイプラインは2つの層から構成されています。
- ロジック :関係性、次元、および尺度を捉える意味論的層。これは、メトリクスの意味の概念的な定義です。
- 物理ストレージ :その論理を実際に具現化した表現。複数のマテリアライゼーションが存在する可能性があり、例えば、異なる粒度で事前に集約されている場合など、これにより高速なクエリパフォーマンスが可能になります。
クエリ実行
SELECT ... FROM <metric_view>を実行すると、クエリオプティマイザは集計を考慮したクエリ書き換えを使用してパフォーマンスを最適化します。

- 高速パス : 適切なマテリアライゼーションが存在する場合、コンピュート前のマテリアライズドビューから読み取ります。
- フォールバックパス :適切なマテリアライゼーションが利用できない場合、ソースデータから直接読み取ります。
クエリ最適化機能は、マテリアライズドデータとソースデータのどちらを使用するかを選択することで、パフォーマンスと鮮度を自動的にバランスさせます。どの経路を選択しても、結果は透明性をもって得られます。
要件
メトリクス ビューにマテリアライゼーションを使用するには、次の手順を実行します。
- ワークスペースではサーバレス コンピュートが有効になっている必要があります。 これはLakeFlow Spark宣言型パイプラインを実行するために必要です。
- Databricks Runtime 17.3 以降を実行しているSQLまたはコンピュート リソース。
構成リファレンス
マテリアライゼーションに関連するすべての情報は、メトリクス ビューの YAML 定義のmaterializationという名前の最上位フィールドで定義されます。
materializationフィールドには、以下の必須フィールドが含まれています。
- スケジュール :マテリアライズドビューのスケジュール句と同じ構文をサポートします。
- モード :
relaxedに設定する必要があります。 - materialized_views : マテリアライズするマテリアライズドビューのリスト。
- 名前 :具現化の名前。
- 寸法 :具体化する寸法のリスト。ディメンション名への直接参照のみが許可されており、式はサポートされていません。
- メジャー : マテリアライズするメジャーのリスト。メジャー名への直接参照のみが許可され、式はサポートされていません。
- type : マテリアライズドビューが集約されているかどうかを指定します。2つの値
aggregatedとunaggregated)を受け入れます。typeがaggregatedである場合、少なくとも1つの次元または尺度が存在する必要があります。typeがunaggregatedの場合、次元や尺度は定義されるべきではありません。
TRIGGER ON UPDATE句は、メトリクス ビューのマテリアライゼーションではサポートされていません。
例となる定義
version: 1.1
source: prod.operations.orders_enriched_view
filter: revenue > 0
dimensions:
- name: category
expr: substring(category, 5)
- name: color
expr: color
measures:
- name: total_revenue
expr: SUM(revenue)
- name: number_of_suppliers
expr: COUNT(DISTINCT supplier_id)
materialization:
schedule: every 6 hours
mode: relaxed
materialized_views:
- name: baseline
type: unaggregated
- name: revenue_breakdown
type: aggregated
dimensions:
- category
- color
measures:
- total_revenue
- name: suppliers_by_category
type: aggregated
dimensions:
- category
measures:
- number_of_suppliers
クエリ書き換えモード
relaxedモードでは、自動クエリ リライトは、候補マテリアライズドビューにクエリを処理するために必要なディメンションとメジャーがあるかどうかのみを検証します。
以下のチェックはスキップされます。
- マテリアライズドビューが最新の状態であるかどうか。
- SQL設定が一致するかどうか(例:
ANSI_MODEまたはTIMEZONE)。 - マテリアライズドビューが決定論的な結果を返すかどうか。
クエリに以下のいずれかの条件が含まれている場合、クエリの書き換えは行われず、クエリは元のテーブルにフォールバックします。
- マテリアライズドビューにおける行レベルセキュリティ(RLS)または列レベルマスキング(CLM) 。
- マテリアライズドビューにおける
current_timestamp()のような非決定論的関数。これらは、メトリクス ビュー定義またはメトリクス ビューで使用されるソース テーブルに表示される場合があります。
試験的なリリース期間中は、 relaxedのみがサポートされるモードです。これらのチェックが失敗した場合、クエリはソースデータにフォールバックします。
メトリクス ビューのマテリアライゼーションのタイプ
次のセクションでは、メトリクス ビューで使用できるマテリアライズドビューのタイプについて説明します。
集約型
このタイプは、ターゲット カバレッジの指定されたメジャーとディメンションの組み合わせに対する事前コンピュート集計を行います。
これは、特定の一般的な集計クエリ パターンまたはウィジェットをターゲットにする場合に役立ちます。Databricksでは、潜在的なフィルター列をマテリアライズドビュー構成のディメンションとして含めることをお勧めします。 潜在的なフィルター列は、 WHERE句のクエリ時に使用される列です。
非集約型
このタイプは、集計タイプと比較してパフォーマンスへの影響は少ないものの、より広い範囲をカバーするために、集計されていないデータモデル全体(たとえば、 source 、 join 、 filterフィールド)を具体化します。
以下の条件が満たされる場合に、この型を使用してください。
- その値は、コストのかかるビューまたはSQLクエリです。
- メトリクス ビューで定義された結合は高価です。
ソースが選択フィルターが適用されていない直接的なテーブル参照である場合、集計されていないマテリアライズドビューはメリットをもたらさない可能性があります。
物質化ライフサイクル
このセクションでは、マテリアライゼーションがそのライフサイクル全体を通してどのように作成、管理、更新されるかを説明します。
作成および変更
メトリクス ビューの作成または変更 ( CREATE 、 ALTER 、または Catalog Explorer を使用) は同期的に行われます。 指定されたマテリアライズドビューは、 LakeFlow Spark宣言型パイプラインを使用して非同期に実体化されます。
メトリクス ビューを作成すると、 Databricks LakeFlow Spark宣言型パイプライン パイプラインを作成し、マテリアライズドビューが指定されている場合はすぐに初期更新をスケジュールします。 メトリクス ビューは、ソース データからのクエリにフォールバックすることで、実体化なしでもクエリ可能のままです。
メトリクスビューを変更しても、初めてマテリアライゼーションを有効にする場合を除き、新しい更新はスケジュールされません。 マテリアライズドビューは、次回の定期更新が完了するまで、自動クエリ書き換えには使用されません。
実装スケジュールを変更しても、更新はトリガーされません。
更新動作をより細かく制御するには、 「手動更新」を参照してください。
基盤となるパイプラインを検査する
メトリクス ビューの具体化は、 LakeFlow Spark宣言型パイプラインを使用して実装されます。 パイプラインへのリンクは、カタログエクスプローラーの 「概要」 タブにあります。カタログエクスプローラーへのアクセス方法については、 「カタログエクスプローラーとは?」を参照してください。
メトリクス ビューでDESCRIBE EXTENDEDを実行して、このパイプラインにアクセスすることもできます。 「 情報更新」 セクションには、パイプラインへのリンクが含まれています。
DESCRIBE EXTENDED my_metric_view;
出力例:
-- Returns additional metadata such as parent schema, owner, access time etc.
> DESCRIBE TABLE EXTENDED customer;
col_name data_type comment
------------------------------- ------------------------------ ----------
... ... ...
# Detailed Table Information
... ...
Language YAML
Table properties ...
# Refresh information
Latest Refresh status Succeeded
Latest Refresh https://...
Refresh Schedule EVERY 3 HOURS
手動更新
LakeFlow Spark宣言型パイプライン ページへのリンクから、パイプラインの更新を手動で開始して具体化を更新できます。 次のSQLコマンドを使用して手動更新をトリガーすることもできます。
REFRESH MATERIALIZED VIEW <metric-view-name>
増分更新
マテリアライズドビューは可能な限り増分更新を使用し、データソースとプラン構造に関して同じ制限があります。
前提条件と制限の詳細については、 「マテリアライズドビューの増分更新」を参照してください。
クエリの自動書き換え
マテリアライゼーションを持つメトリクスビューへのクエリは、可能な限りそのマテリアライゼーションを使用しようとします。 クエリ書き換え戦略には、完全一致と非集約一致の2種類があります。

メトリクス ビューに対してクエリを実行すると、オプティマイザはクエリと利用可能なユーザー定義のマテリアライゼーションを分析します。 このアルゴリズムを使用すると、クエリはベーステーブルではなく、最適なマテリアライゼーションに対して自動的に実行されます。
- 最初の試みは完全一致です。
- 集約されていないマテリアライゼーションが存在する場合は、集約されていないマッチングを試みます。
- クエリの書き換えが失敗した場合、クエリはソーステーブルから直接読み取ります。
クエリ書き換えが有効になるには、マテリアライズ処理が完了している必要があります。
クエリがマテリアライズドビューを使用していることを確認します。
クエリがマテリアライズドビューを使用しているかどうかを確認するには、クエリに対してEXPLAIN EXTENDEDを実行してクエリ プランを確認します。 クエリがマテリアライズドビューを使用している場合、リーフノードには__materialization_mat___metric_viewとYAMLファイルからのマテリアライズドの名前が含まれます。
あるいは、クエリプロファイルにも同じ情報が表示されます。
完全一致
完全一致戦略の対象となるには、クエリのグループ化式がマテリアライゼーションディメンションと完全に一致する必要があります。クエリの集計式は、マテリアライゼーションメジャーのサブセットでなければなりません。
未集計のマッチ
集計されていないマテリアライゼーションが利用可能な場合、この戦略は常に適用可能です。
課金
マテリアライズドビューを更新すると、 LakeFlow Spark宣言型パイプラインの利用料金が発生します。
既知の制限事項
メトリクス ビューのマテリアライゼーションには次の制限が適用されます。
- 別のメトリクス ビューをソースとして参照する実体化を含むメトリクス ビューは、未集約のマテリアライゼーションを持つことができません。