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

Databricks SQLでマテリアライズドビューを使用する

この記事ではDatabricks SQLでマテリアライズドビューを作成および更新して、パフォーマンスを向上させ、データ処理と分析のワークロードのコストを削減する方法について説明します。

マテリアライズドビューとは何ですか?

Databricks SQLでは、マテリアライズドビューは、クエリの結果を物理的に保存するUnity Catalogマネージドテーブルです。 オンデマンドで結果をコンピュートする標準ビューとは異なり、マテリアライズドビューは結果をキャッシュし、基になるソース テーブルの変更に応じてスケジュールに従ってまたは自動的に更新します。

マテリアライズドビューは、抽出、変換、ロード ( ETL ) 処理などのデータ処理ワークロードに適しています。 マテリアライズドビューは、コンプライアンス、修正、集計、または一般的な変更データ キャプチャ ( CDC ) のデータを処理するためのシンプルで宣言的な方法を提供します。 マテリアライズドビューでは、ベーステーブルのクリーニング、強化、非正規化により、使いやすい変換も可能になります。 マテリアライズドビューは、高価なクエリや頻繁に使用されるクエリを事前に計算することで、クエリのレイテンシとリソース消費を削減します。 多くの場合、ソース テーブルから変更を段階的にコンピュートすることができ、効率とエンド ユーザー エクスペリエンスがさらに向上します。

マテリアライズドビューの一般的な使用例は次のとおりです。

  • エンドユーザーのクエリ遅延を最小限に抑えながら、BI ダッシュボードを最新の状態に保ちます。
  • シンプルなSQLロジックで複雑なETLオーケストレーションを削減します。
  • 複雑で階層化された変換を構築します。
  • 最新の知見や常に安定したパフォーマンスが求められるユースケース。

Databricks SQLウェアハウスでマテリアライズドビューを作成すると、マテリアライズドビューの作成と更新を処理するためのサーバレス パイプラインが作成されます。 カタログ エクスプローラーで更新操作のステータスを監視できます。DESCRIBE EXTENDEDを使用してマテリアライズドビューの詳細を表示するを参照してください。

要件

Databricks SQLで作成されたマテリアライズドビューは、サーバレス パイプラインによってサポートされています。 この機能を使用するには、ワークスペースがサーバレス パイプラインをサポートしている必要があります。

マテリアライズドビューを作成または更新するための要件:

  • Unity Catalog 対応の Pro またはサーバレスSQLウェアハウスを使用する必要があります。

  • マテリアライズドビューを更新するには、それを作成したワークスペースにいる必要があります。

  • Deltaテーブルからマテリアライズドビューを段階的に更新するには、ソース テーブルで行追跡が有効になっている必要があります。

  • 所有者 (マテリアライズドビューを作成するユーザー) には次の権限が必要です。

    • SELECT マテリアライズドビューによって参照される実表に対する権限。
    • USE CATALOG マテリアライズドビューのソース テーブルを含むカタログとスキーマに対するUSE SCHEMA権限。
    • USE CATALOG マテリアライズドビューのターゲット カタログとスキーマに対するUSE SCHEMA権限。
    • CREATE TABLE マテリアライズドビューを含むスキーマに対するCREATE MATERIALIZED VIEW権限。
  • マテリアライズドビューを更新するには、マテリアライズドビューに対するREFRESH権限が必要です。

  • ワークスペースは、サーバレスSQLウェアハウスをサポートするリージョンにある必要があります。

  • サーバレスの 利用規約に同意しておく必要があります。

マテリアライズドビューをクエリするための要件:

  • マテリアライズドビューの所有者であるか、マテリアライズドビューにSELECTとその親のUSE SCHEMAおよびUSE CATALOGを持っている必要があります。

  • 次のコンピュート リソースのいずれかを使用する必要があります。

    • SQLウェアハウス

    • Lakeflow 宣言型パイプライン インターフェイス

    • 標準アクセス モード コンピュート (以前の共有アクセス モード)

    • Databricks Runtime 15.4 以降の専用アクセスモード (旧シングルユーザーアクセスモード) (ワークスペースがサーバレス コンピュートに対して有効になっている場合)。専用コンピュートでのきめ細かなアクセス制御を参照してください。

      マテリアライズドビューの所有者の場合は、14.3 以降のDatabricks Runtimeを実行している専用アクセス モードのコンピュート リソースを使用できます。

具体化されたビューの使用に関するその他の制限については、 制限事項を参照してください。

マテリアライズドビューの作成

Databricks SQL マテリアライズドビュー CREATE 操作では、 Databricks SQL ウェアハウスを使用して、マテリアライズドビューでデータを作成および読み込みます。 マテリアライズドビューの作成は同期操作であるため、マテリアライズドビューが作成され、初期データの読み込みが完了するまで、 CREATE MATERIALIZED VIEW コマンドはブロックされます。 サーバレス パイプラインは、 Databricks SQL マテリアライズドビューごとに自動的に作成されます。 マテリアライズドビューが更新されるとLakeflow宣言型パイプラインは更新を処理します。

マテリアライズドビューを作成するには、 CREATE MATERIALIZED VIEWステートメントを使用します。 作成ステートメントを送信するには、Databricks UI の SQL エディター、 Databricks SQL CLI 、またはDatabricks SQL APIを使用します。

マテリアライズドビューを作成したユーザーがマテリアライズドビューの所有者となります。

次の例では、ベース テーブルbase_table1からマテリアライズドビューmv1を作成します。

SQL
-- This query defines the materialized view:
CREATE OR REPLACE MATERIALIZED VIEW mv1
AS SELECT
date,
sum(sales) AS sum_of_sales
FROM
base_table1
GROUP BY
date;

CREATE OR REPLACE MATERIALIZED VIEW ステートメントを使用してマテリアライズドビューを作成すると、最初のデータ更新と入力がすぐに開始されます。これは SQLウェアハウス コンピュートを消費しません。 代わりに、サーバレス Lakeflow 宣言型パイプラインが作成とその後の更新に使用されます。

ベーステーブルの列コメントは、作成時にのみ新しいマテリアライズドビューに自動的に伝播されます。 スケジュール、テーブル制約、またはその他のプロパティを追加するには、マテリアライズドビュー定義 ( SQLクエリ) を変更します。

同じSQLステートメントは、次回またはスケジュールに従って呼び出された場合、マテリアライズドビューを更新します。 この方法で実行された更新は、他の更新と同じように機能します。詳細については、 「マテリアライズドビューの更新」を参照してください。

マテリアライズドビューの設定の詳細については、Databricks SQLでのマテリアライズドビューの設定を参照してください。マテリアライズドビューを作成するための完全な構文については、 CREATE MATERIALIZED VIEWを参照してください。さまざまな形式で、さまざまな場所からデータを読み込む方法については、「Lakeflow 宣言型パイプラインを使用したデータの読み込み」を参照してください。

外部システムからデータを読み込む

Databricks サポートされている データソースについては、レイクハウスフェデレーションを使用して外部データをロードすることをお勧めします。 レイクハウスフェデレーションでサポートされていないソース からのデータの読み込みについては、「 データ形式のオプション」を参照してください。 データの読み込みに関する一般的な情報 (例を含む)については、「Lakeflow 宣言型パイプラインを使用したデータの読み込み」を参照してください。

機密データを非表示にする

備考

プレビュー

この機能は パブリック プレビュー段階です。

マテリアライズドビューを使用すると、テーブルにアクセスするユーザーから機密データを非表示にすることができます。 これを行う 1 つの方法は、最初からそのデータを含まないようにクエリを作成することです。ただし、クエリを実行するユーザーの権限に基づいて列をマスクしたり、行をフィルター処理したりすることもできます。たとえば、グループHumanResourcesDeptに属していないユーザーに対してtax_id列を非表示にすることができます。これを行うには、マテリアライズドビューの作成時にROW FILTERおよびMASK構文を使用します。 詳細については、 「行フィルターと列マスク」を参照してください。

マテリアライズドビューを更新する

マテリアライズドビューを更新すると、ビューが更新され、更新時のベース テーブルへの最新の変更が反映されます。

マテリアライズドビューを定義する場合、 CREATE OR REPLACE MATERIALIZED VIEWステートメントはビューの作成と、スケジュールされた更新の両方に使用されます。 REFRESH MATERIALIZED VIEWステートメントを使用して、クエリを再度指定することなくマテリアライズドビューを更新することもできます。 このコマンドのSQL構文と問題の詳細については、 REFRESH ( MATERIALIZED VIEWまたはSTREAMING TABLE )」を参照してください。 増分更新できるマテリアライズドビューのタイプの詳細については、 「マテリアライズドビューの増分更新」を参照してください。

更新ステートメントを送信するには、Databricks UI のSQLエディター、SQL ウェアハウスにアタッチされたノートブック、Databricks SQL CLI、またはDatabricks SQL API を使用します。

所有者、およびテーブルに対するREFRESH権限を付与されているユーザーは、マテリアライズドビューを更新できます。

次の例では、 mv1マテリアライズドビューを更新します。

SQL
REFRESH MATERIALIZED VIEW mv1;

デフォルトでは操作は同期的であり、更新操作が完了するまでコマンドはブロックされます。非同期的に更新するには、 ASYNCキーワードを追加します。

SQL
REFRESH MATERIALIZED VIEW mv1 ASYNC;

Databricks SQLマテリアライズドビューはどのように更新されますか?

マテリアライズドビュー は、サーバレス Lakeflow 宣言型パイプラインを自動的に作成して使用し、更新操作を処理します。 更新はパイプラインによって管理され、更新はマテリアライズドビューの作成に使用された Databricks SQL ウェアハウスによって監視されます。 マテリアライズドビューは、スケジュールに従って実行されるパイプラインを使用して更新できます。 Databricks SQLで作成したマテリアライズドビューは、常にトリガーモードで実行されます。トリガー パイプライン モードと継続的パイプライン モードを参照してください。

マテリアライズドビューは、2 つの方法のいずれかを使用して更新されます。

  • 増分更新 - システムはビューのクエリを評価して、最後の更新後に発生した変更を識別し、新しいデータまたは変更されたデータのみをマージします。
  • 完全更新 - 増分更新を実行できない場合、システムはクエリ全体を実行し、マテリアライズドビュー内の既存のデータを新しい結果に置き換えます。

クエリの構造とソース データの種類によって、増分更新がサポートされるかどうかが決まります。増分更新をサポートするには、行追跡と変更データフィードを有効にして、ソース データをDeltaテーブルに保存する必要があります。 マテリアライズドビューを作成した後、その更新動作を監視して、段階的に更新されるか完全な更新によって更新されるかを確認できます。

更新タイプの詳細と増分更新の最適化方法については、 「マテリアライズドビューの増分更新」を参照してください。

非同期更新

デフォルトでは、更新操作は同期的に実行されます。更新操作を非同期的に実行するように設定することもできます。これは、更新コマンドでASYNCキーワードを使用して設定できます。 REFRESH (MATERIALIZED VIEW または STREAMING TABLE)を参照してください。各アプローチに関連する動作は次のとおりです。

  • 同期: 同期更新は、更新が完了するまで他の操作を続行できません。Lakeflow ジョブ などのオーケストレーション ツールで更新操作を順序付ける場合など、次の手順で結果が必要な場合は、同期更新を使用します。ジョブを使用してマテリアライズドビューを調整するには、 SQL タスクの種類を使用します。Lakeflowジョブを参照してください。
  • 非同期 : 非同期更新は、マテリアライズドビュー 更新が開始されたときに Lakeflow 宣言型パイプライン コンピュートでバックグラウンド ジョブを開始し、データの読み込みが完了する前にコマンドが戻るようにします。 この更新タイプでは、コマンドが開始されるウェアハウスのコンピュート容量が必ずしも操作に保持されるとは限らないため、コストを節約できます。 更新がアイドル状態になり、他のタスクが実行されていない場合、ウェアハウスはシャットダウンでき、更新は他の使用可能なコンピュートを使用します。 さらに、非同期更新では、複数の操作を並行して開始できます。

マテリアライズドビュー 更新のスケジュール

Databricks SQLマテリアライズドビューは、定義されたスケジュールに基づいて自動的に更新されるように、またはアップストリーム データが変更されたときにトリガーされるように構成できます。

備考

ベータ版

TRIGGER ON UPDATE機能はベータ版です。ワークスペースでこの機能を有効にするには、Databricks の担当者に問い合わせてください。

スケジュールまたはトリガーを設定するには、次のいずれかを実行します。

  • マテリアライズドビューを作成するときに、 SCHEDULE句を使用してスケジュールを設定します。
  • マテリアライズドビューを作成するときに、 TRIGGER ON UPDATE句を使用してトリガーを構成します。
  • ALTER MATERIALIZED VIEWステートメントを使用して、スケジュールまたはトリガーを追加または変更します。
注記

または、 CREATE OR REPLACE MATERIALIZED VIEW ステートメントまたは REFRESH ステートメントを含むジョブでタスクを作成し、他のジョブと同様に調整することもできます。Lakeflowジョブを参照してください。

次の例では、ベース テーブルbase_table1からマテリアライズドビューmv1を作成し、マテリアライズドビューを 1 時間に 1 回更新するスケジュールを作成します。

SQL
CREATE OR REPLACE MATERIALIZED VIEW mv1
SCHEDULE EVERY 1 hour
AS SELECT
date,
sum(sales) AS sum_of_sales
FROM
base_table1
GROUP BY
date;

作成後にスケジュールを設定または変更するには、 ALTER MATERIALIZED VIEWステートメントを使用します。

SQL
ALTER MATERIALIZED VIEW sales ALTER SCHEDULE EVERY 1 day;

スケジュールが作成されると、更新を処理するように新しい Databricks ジョブが自動的に構成されます。

スケジュールを表示するには、次のいずれかを実行します。

更新のスケジュールがある場合でも、更新されたデータが必要な場合は、いつでも手動で更新を実行することができます。

アクティブな更新を停止する

Lakeflow 宣言型パイプライン UI でアクティブな更新を停止するには、 パイプラインの詳細 ページで 停止 をクリックしてパイプラインの更新を停止します。Databricks CLI またはパイプライン APIの POST /api/2.0/pipelines/{pipeline_id}/stop を使用して更新を停止することもできます。

更新のタイムアウト

長時間実行される更新はタイムアウトする可能性があります。2025 年 8 月 14 日以降に作成または更新されたマテリアライズドビューは、更新の実行に使用されたSQLウェアハウスに関連付けられたタイムアウトを使用します。 ウェアハウスにタイムアウトが設定されていない場合は、デフォルトの 2 日が使用されます。

注記

マテリアライズドビューは、 CREATE OR REFRESHステートメントを手動で実行する場合にのみタイムアウトを同期します。 スケジュールされた更新では、最新のCREATE OR REFRESHからのタイムアウトが保持されます。

更新の SQL でSTATEMENT_TIMEOUT構成を使用してタイムアウトを明示的に設定できます。STATEMENT_TIMEOUTを参照してください。

削除ベクトルが有効になっているマテリアライズドビューからレコードを完全に削除します

備考

プレビュー

マテリアライズドビューでの REORG ステートメントのサポートは、パブリック プレビュー段階です。

注記
  • マテリアライズドビューでREORGステートメントを使用するには、 Databricks Runtime 15.4 以降が必要です。
  • REORGステートメントは任意のマテリアライズドビューで使用できますが、削除が有効になっているマテリアライズドビューからレコードを削除する場合にのみ必要です。 このコマンドは、下り通路を有効にせずにマテリアライズドビューで使用した場合には効果がありません。

GDPR コンプライアンスなど、削除が有効になっているマテリアライズドビューの基盤となるストレージからレコードを物理的に削除するには、 GDPRビューのデータに対してvacuum操作が確実に実行されるように追加の手順を実行する必要があります。

レコードを物理的に削除するには:

  1. マテリアライズドビューに対してREORGステートメントを実行し、 APPLY (PURGE)問題を指定します。 たとえばREORG TABLE <materialized-view-name> APPLY (PURGE);REORG TABLEを参照してください。
  2. マテリアライズドビューのデータ保存期間が経過するまで待ちます。 デフォルトのデータ保持期間は 7 日間ですが、 delta.deletedFileRetentionDurationテーブル プロパティを使用して構成できます。「タイムトラベルクエリのデータ保持を構成する」を参照してください。
  3. REFRESH the マテリアライズドビュー. 更新 a マテリアライズドビューを参照してください。REFRESH操作から 24 時間以内に、レコードが完全に削除されるようにするために必要なVACUUM操作を含む、Lakeflow宣言型パイプライン メンテナンス タスクが自動的に実行されます。

マテリアライズドビューの削除

注記

マテリアライズドビューを削除するコマンドを送信するには、そのマテリアライズドビューの所有者であるか、マテリアライズドビューに対するMANAGE権限を持っている必要があります。

マテリアライズドビューを削除するには、 DROP VIEWステートメントを使用します。 DROPステートメントを送信するには、Databricks UI の SQL エディター、 Databricks SQL CLI 、またはDatabricks SQL API を使用できます。次の例では、 mv1マテリアライズドビューを削除します。

SQL
DROP MATERIALIZED VIEW mv1;

カタログ エクスプローラーを使用してマテリアライズドビューをドロップすることもできます。

  1. クリックデータアイコン。サイドバーの カタログ
  2. 左側のカタログ エクスプローラー ツリーでカタログを開き、マテリアライズドビューが配置されているスキーマを選択します。
  3. 選択したスキーマの下にある テーブル アイテムを開き、[マテリアライズドビュー] をクリックします。
  4. ケバブメニューケバブメニューアイコン。で、 [削除] を選択します。

マテリアライズドビューのコストを理解する

マテリアライズドビューは、ノートブックやジョブに設定したコンピュートの外にあるサーバレス コンピュートで実行されるため、それに関連するコストをどう理解すればよいのか疑問に思うかもしれません。 マテリアライズドビューの使用状況は、 DBU消費量によって追跡されます。 詳細については、 「マテリアライズドビューまたはストリーミング テーブルのDBU消費量は何ですか?」を参照してください。

行追跡を有効にする

Deltaテーブルからの増分更新をサポートするには、それらのソース テーブルに対して行追跡を有効にする必要があります。 ソース テーブルを再作成する場合は、行トラッキングを再度有効にする必要があります。

次の例は、テーブルで行追跡を有効にする方法を示しています。

SQL
ALTER TABLE source_table SET TBLPROPERTIES (delta.enableRowTracking = true);

詳細については、 Deltaテーブルの行追跡の使用」を参照してください。

制限事項

  • コンピュートおよびワークスペースの要件については、 「要件」を参照してください。

  • 増分更新の要件については、 「マテリアライズドビューの増分更新」を参照してください。

  • マテリアライズドビューは、ID 列または代理キーをサポートしていません。

  • マテリアライズドビューがNULL可能な列に対して合計集計を使用し、その列にNULL値のみが残っている場合、マテリアライズドビューの結果の集計値はNULLではなく 0 になります。

  • マテリアライズドビューからチェンジデータフィードを読み取ることはできません。

  • タイムトラベルクエリはマテリアライズドビューではサポートされていません。

  • マテリアライズドビューをサポートする基になるファイルには、マテリアライズドビューの定義に表示されないアップストリームテーブルのデータ (個人を特定できる可能性のある情報を含む) が含まれる場合があります。 このデータは、マテリアライズドビューの増分更新をサポートするために、基になるストレージに自動的に追加されます。 マテリアライズドビューの基になるファイルは、マテリアライズドビュー スキーマの一部ではないアップストリーム テーブルからのデータを公開するリスクがあるため、Databricks では、基になるストレージを信頼されていないダウンストリーム コンシューマーと共有しないことをお勧めします。 たとえば、マテリアライズドビューの定義に COUNT(DISTINCT field_a) 句が含まれているとします。 マテリアライズドビュー定義には aggregate COUNT DISTINCT 句のみが含まれていますが、基になるファイルには field_aの実際の値のリストが含まれます。

  • 専用コンピュートでこれらの機能を使用する場合でも、サーバーレス コンピュート料金が発生する場合があります。

  • マテリアライズドビューで AWS PrivateLink 接続を使用する必要がある場合は、Databricks の担当者にお問い合わせください。

関連記事