メトリクス ビューの具体化
実験段階
この機能は実験的なものです。
この記事では、メトリクス ビューのマテリアライゼーションを使用してクエリのパフォーマンスを高速化する方法について説明します。
メトリクス ビューのマテリアライゼーションは、マテリアライズドビューを使用してクエリを高速化します。 LakeFlow Spark宣言型パイプラインは、特定のメトリクス ビューのユーザー定義のマテリアライズドビューを調整します。 クエリ時に、クエリ オプティマイザーは、自動集計認識クエリ マッチング (クエリ リライトとも呼ばれます) を使用して、メトリクス ビュー上のユーザー クエリを最適なマテリアライズドビューにインテリジェントにルーティングします。
このアプローチでは、さまざまなパフォーマンス目標に対してどの集計テーブルまたはマテリアライズドビューをクエリするかを決定する必要がなく、事前計算と自動増分更新の利点が得られ、個別の本番運用パイプラインを管理する必要がなくなります。
概要
次の図は、メトリクス ビューが定義とクエリの実行をどのように処理するかを示しています。

定義フェーズ
マテリアライゼーションを使用してメトリクス ビューを定義する場合、 CREATE METRIC VIEWまたはALTER METRIC VIEWディメンション、メジャー、更新スケジュールを指定します。 Databricks 、マテリアライズドビューを維持するマネージドLakeFlow Spark宣言型パイプラインを作成します。
クエリ実行
SELECT ... FROM <metric_view>を実行すると、クエリ オプティマイザーは集計を考慮したクエリ書き換えを使用してパフォーマンスを最適化します。
- 高速パス : 該当する場合、コンピュート前のマテリアライズドビューから読み取ります。
- フォールバック パス : マテリアライゼーションが利用できない場合にソース データから直接読み取ります。
クエリ オプティマイザーは、マテリアライズド データとソース データを選択して、パフォーマンスと鮮度のバランスを自動的に調整します。どのパスが使用されるかに関係なく、結果は透過的に受け取られます。
要件
メトリクス ビューにマテリアライゼーションを使用するには、次の手順を実行します。
- ワークスペースではサーバレスが有効になっている必要があります。 これはLakeFlow Spark宣言型パイプラインを実行するために必要です。
- Databricks Runtime 17.2 以上。
構成リファレンス
マテリアライゼーションに関連するすべての情報は、メトリクス ビューの YAML 定義のmaterializationという名前の最上位フィールドで定義されます。
materializationフィールドには次の必須フィールドが含まれています:
- スケジュール :マテリアライズドビューのスケジュール句と同じ構文をサポートします。
- モード :
relaxedに設定する必要があります。 - materialized_views : マテリアライズするマテリアライズドビューのリスト。
- name : マテリアライゼーションの名前。
- ディメンション : 実現するディメンションのリスト。ディメンション名への直接参照のみが許可され、式はサポートされていません。
- 対策 : 実現する対策のリスト。メジャー名への直接参照のみが許可され、式はサポートされていません。
- type : マテリアライズドビューが集約されるかどうかを指定します。 2 つの値
aggregatedとunaggregatedが受け入れられます。typeがaggregatedの場合、少なくとも 1 つのディメンションまたはメジャーが必要です。typeがunaggregatedの場合、ディメンションまたはメジャーを定義する必要はありません。
TRIGGER ON UPDATE句は、メトリクス ビューの実体化ではサポートされていません。
定義例
version: 0.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
Mode
relaxedモードでは、自動クエリ リライトは、候補マテリアライズドビューにクエリを処理するために必要なディメンションとメジャーがあるかどうかのみを検証します。
これは、いくつかのチェックがスキップされることを意味します。
- マテリアライズドビューが最新であるかどうかのチェックはありません。
- 一致する SQL 設定 (
ANSI_MODEやTIMEZONEなど) があるかどうかのチェックは行われません。 - マテリアライズドビューが決定的な結果を返すかどうかのチェックはありません。
次のチェックが実行されます。
- マテリアライズドビューで行レベルのセキュリティ (RLS)または列レベルのマスキング (CLM)が使用されるかどうか
- マテリアライズドビューで
current_timestamp()のような関数が使用されているかどうか
試験的なリリース期間中は、 relaxedのみがサポートされるモードです。これらのチェックが失敗した場合、クエリはソース データにフォールバックします。
メトリクス ビューの実体化のタイプ
次のセクションでは、メトリクス ビューで使用できるマテリアライズドビューのタイプについて説明します。
集約型
このタイプは、ターゲット カバレッジの指定されたメジャーとディメンションの組み合わせに対する事前コンピュート集計を行います。
これは、特定の一般的な集計クエリ パターンまたはウィジェットをターゲットにする場合に役立ちます。Databricks 、潜在的なフィルター列 (クエリ時にWHERE句で使用される列) をマテリアライズドビュー構成のディメンションとして含めることをお勧めします。
非集約型
このタイプは、集約型と比較してパフォーマンスの向上が少なく、より広い範囲をカバーするために、集約されていないデータ モデル全体 (たとえば、 source 、 join 、 filterフィールド) を具体化します。
次の条件に当てはまる場合は、このタイプを使用します。
- ソースはコストのかかるビューまたは SQL クエリです。
- メトリクス ビューで定義された結合は高価です。
ソースが選択フィルターのない直接テーブル参照である場合、未集計のマテリアライズドビューでは利点が得られない可能性があります。
具体化ライフサイクル
CREATE および ALTER VIEW の動作
メトリクス ビューのCREATEおよびALTERコマンドは、メトリクス ビュー自体を同期的に作成または変更します。 ただし、指定されたマテリアライズドビューは、 LakeFlow Spark宣言型パイプラインを使用して非同期的に具体化されます。
CREATEコマンドの場合、 Databricks LakeFlow Spark宣言型パイプライン パイプラインを作成し、マテリアライズドビューが指定されている場合はすぐに初期更新をスケジュールします。 メトリクス ビューは、ソース データからのクエリにフォールバックすることで、実体化なしでもクエリ可能のままです。
ALTERコマンドでは、初めてマテリアライゼーションを有効にする場合を除き、新しい更新はスケジュールされません。マテリアライズドビューは、次にスケジュールされた更新が完了するまで、自動クエリ リライトには使用されません。
マテリアライズスケジュールを変更しても、更新はトリガーされません。
更新動作をより細かく制御するには、 「手動更新」を参照してください。
基礎となるパイプラインを検査する
メトリクス ビューの具体化は、 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://xyz.cloud.databricks.com/#joblist/pipelines/9a594074-e3bc-4487-be68-37fed45ec41e/updates/ef019ede-1585-45f5-a46b-da081cc785d2
手動更新
LakeFlow Spark宣言型パイプライン ページへのリンクから、パイプラインの更新を手動で開始して具体化を更新できます。 パイプライン ID に基づく API 呼び出しを使用してこれをオーケストレーションすることもできます。
たとえば、次の Python スクリプトはパイプラインの更新を開始します。
from databricks.sdk import WorkspaceClient
client = WorkspaceClient()
pipeline_id = "01484540-0a06-414a-b10f-e1b0e8097f15"
client.pipelines.start_update(pipeline_id)
LakeFlow Jobの一部として手動更新を実行するには、上記のロジックを含むPythonスクリプトを作成し、それを Pythonスクリプト タイプのタスクとして追加します。 あるいは、同じロジックでノートブックを作成し、 ノートブック タイプのタスクを追加することもできます。
増分更新
マテリアライズドビューは可能な限り増分更新を使用し、データ ソースと計画構造に関して同じ制限が適用されます。
前提条件と制限の詳細については、 「マテリアライズドビューの増分更新」を参照してください。
自動クエリ書き換え
マテリアライゼーションを含むメトリクス ビューへのクエリでは、そのマテリアライゼーションを可能な限り使用しようとします。 クエリ書き換え戦略には、完全一致と非集約一致の 2 つがあります。

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