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

メトリクス ビューの具体化

備考

実験段階

この機能は実験的なものです。

この記事では、メトリクス ビューのマテリアライゼーションを使用してクエリのパフォーマンスを高速化する方法について説明します。

メトリクス ビューのマテリアライゼーションは、マテリアライズドビューを使用してクエリを高速化します。 LakeFlow Spark宣言型パイプラインは、特定のメトリクス ビューのユーザー定義のマテリアライズドビューを調整します。 クエリ時に、クエリ オプティマイザーは、自動集計認識クエリ マッチング (クエリ リライトとも呼ばれます) を使用して、メトリクス ビュー上のユーザー クエリを最適なマテリアライズドビューにインテリジェントにルーティングします。

このアプローチでは、さまざまなパフォーマンス目標に対してどの集計テーブルまたはマテリアライズドビューをクエリするかを決定する必要がなく、事前計算と自動増分更新の利点が得られ、個別の本番運用パイプラインを管理する必要がなくなります。

概要

次の図は、メトリクス ビューが定義とクエリの実行をどのように処理するかを示しています。

Metrix ビューのマテリアライゼーション定義とクエリ実行

定義フェーズ

マテリアライゼーションを使用してメトリクス ビューを定義する場合、 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 つの値aggregatedunaggregatedが受け入れられます。
      • typeaggregatedの場合、少なくとも 1 つのディメンションまたはメジャーが必要です。
      • typeunaggregatedの場合、ディメンションまたはメジャーを定義する必要はありません。
注記

TRIGGER ON UPDATE句は、メトリクス ビューの実体化ではサポートされていません。

定義例

YAML
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_MODETIMEZONEなど) があるかどうかのチェックは行われません。
  • マテリアライズドビューが決定的な結果を返すかどうかのチェックはありません。

次のチェックが実行されます。

注記

試験的なリリース期間中は、 relaxedのみがサポートされるモードです。これらのチェックが失敗した場合、クエリはソース データにフォールバックします。

メトリクス ビューの実体化のタイプ

次のセクションでは、メトリクス ビューで使用できるマテリアライズドビューのタイプについて説明します。

集約型

このタイプは、ターゲット カバレッジの指定されたメジャーとディメンションの組み合わせに対する事前コンピュート集計を行います。

これは、特定の一般的な集計クエリ パターンまたはウィジェットをターゲットにする場合に役立ちます。Databricks 、潜在的なフィルター列 (クエリ時にWHERE句で使用される列) をマテリアライズドビュー構成のディメンションとして含めることをお勧めします。

非集約型

このタイプは、集約型と比較してパフォーマンスの向上が少なく、より広い範囲をカバーするために、集約されていないデータ モデル全体 (たとえば、 sourcejoinfilterフィールド) を具体化します。

次の条件に当てはまる場合は、このタイプを使用します。

  • ソースはコストのかかるビューまたは SQL クエリです。
  • メトリクス ビューで定義された結合は高価です。
注記

ソースが選択フィルターのない直接テーブル参照である場合、未集計のマテリアライズドビューでは利点が得られない可能性があります。

具体化ライフサイクル

CREATE および ALTER VIEW の動作

メトリクス ビューのCREATEおよびALTERコマンドは、メトリクス ビュー自体を同期的に作成または変更します。 ただし、指定されたマテリアライズドビューは、 LakeFlow Spark宣言型パイプラインを使用して非同期的に具体化されます。

CREATEコマンドの場合、 Databricks LakeFlow Spark宣言型パイプライン パイプラインを作成し、マテリアライズドビューが指定されている場合はすぐに初期更新をスケジュールします。 メトリクス ビューは、ソース データからのクエリにフォールバックすることで、実体化なしでもクエリ可能のままです。

ALTERコマンドでは、初めてマテリアライゼーションを有効にする場合を除き、新しい更新はスケジュールされません。マテリアライズドビューは、次にスケジュールされた更新が完了するまで、自動クエリ リライトには使用されません。

マテリアライズスケジュールを変更しても、更新はトリガーされません。

更新動作をより細かく制御するには、 「手動更新」を参照してください。

基礎となるパイプラインを検査する

メトリクス ビューの具体化は、 LakeFlow Spark宣言型パイプラインを使用して実装されます。 パイプラインへのリンクは、カタログ エクスプローラーの 概要 タブに表示されます。カタログ エクスプローラーにアクセスする方法については、 「カタログ エクスプローラーとは」を参照してください。

メトリクス ビューでDESCRIBE EXTENDEDを実行して、このパイプラインにアクセスすることもできます。 更新情報 セクションには、パイプラインへのリンクが含まれています。

SQL
DESCRIBE EXTENDED my_metric_view;

出力例:

SQL
-- 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 スクリプトはパイプラインの更新を開始します。

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 ビューをクエリすると、オプティマイザーはクエリと使用可能なユーザー定義のマテリアライゼーションを分析します。 クエリは、次のアルゴリズムを使用して、ベース テーブルではなく最適なマテリアライゼーションで自動的に実行されます。

  1. まず完全一致を試みます。
  2. 集約されていないマテリアライゼーションが存在する場合は、集約されていない一致を試行します。
  3. クエリの書き換えに失敗した場合、クエリはソース テーブルから直接読み取ります。
注記

クエリの書き換えを有効にするには、マテリアライゼーションが完了する必要があります。

クエリがマテリアライズドビューを使用していることを確認する

クエリがマテリアライズドビューを使用しているかどうかを確認するには、クエリに対してEXPLAIN EXTENDEDを実行してクエリ プランを確認します。 クエリがマテリアライズドビューを使用している場合、リーフ ノードには__materialization_mat___metric_viewと YAML ファイルからのマテリアライゼーションの名前が含まれます。

あるいは、クエリ プロファイルにも同じ情報が表示されます。

完全一致

完全一致戦略の対象となるには、クエリのグループ化式がマテリアライズド ディメンションと正確に一致している必要があります。クエリの集計式は、マテリアライゼーションメジャーのサブセットである必要があります。

集計されていない試合

集約されていないマテリアライゼーションが利用可能な場合、この戦略は常に適格です。

請求する

マテリアライズドビューの更新は、 LakeFlow Spark宣言型パイプラインの使用量に基づいて請求されます。

既知の制限

メトリクス ビューの実体化には次の制限が適用されます。

  • 別のメトリクス ビューをソースとして参照するマテリアライゼーションを含むメトリクス ビューは、集約されていないマテリアライゼーションを持つことはできません。