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

Databricks SQLにおけるマテリアライズドビューの監視

この記事ではDatabricks SQLでマテリアライズドビューに関する更新データを監視およびクエリする方法について説明します。

単一のマテリアライズドビューの詳細を表示する

カタログ エクスプローラーを使用するか、プログラムでDESCRIBE EXTENDED操作を使用して、単一のマテリアライズドビューの詳細を表示できます。 マテリアライズドビューの更新履歴の詳細についてイベント ログをクエリすることもできます。

カタログエクスプローラーで詳細を表示

マテリアライズドビューに関する情報には、カタログ エクスプローラーで表示することでアクセスできます。 カタログ エクスプローラーでは、最後の更新ステータスと SQL で作成された更新スケジュールを確認できます。SQL で作成されたスケジュールの詳細については、 「CREATE MATERIALIZED VIEW」を参照してください。

カタログ エクスプローラーの右側のパネルには、次のような各マテリアライズドビューの詳細が表示されます。

  1. 現在の更新ステータス と最終実行時刻。実行期間、詳細なエラー、更新タイプ(マテリアライズドビューが完全に更新されたか増分更新されたか、およびその理由を含む) など、更新の詳細を表示するには、 「更新の詳細を表示 」をクリックします。
  2. 更新スケジュール 。マテリアライズドビューにSQL経由でスケジュールが設定されている場合、そのスケジュールが表示されます。 スケジュールを更新するには、 ALTER MATERIALIZED VIEWを使用します。
  3. タグ 。カスタムタグを追加するには、 [タグの追加] を クリックします。タグはコストの属性付けに自動的には使用されませんが、カスタム タグをコストに接続するクエリを手動で作成できます。 詳細については、 「カスタム タグを使用したSQLウェアハウスへのコストの属性」を参照してください。

マテリアライズドビューには、カタログ エクスプローラーでは使用できないプロパティがあります。 これらのプロパティについては、またはプログラムで情報を取得するには、 DESCRIBE EXTENDEDコマンドを使用できます。

詳細を表示 DESCRIBE EXTENDED

DESCRIBE EXTENDEDコマンドを使用すると、マテリアライズドビューの詳細をプログラムで表示できます。 これには、カタログ エクスプローラーから取得できる情報を超える詳細が含まれます。これらには次のものが含まれます。

  • 最後に完了した更新のステータス。

  • 更新スケジュール。

  • マテリアライズドビューの列。

  • マテリアライズドビューの更新タイプ (カタログ エクスプローラーでは使用できません)。

  • マテリアライズドビューのデータ サイズ (合計バイト数) (カタログ エクスプローラーでは使用できません)。

  • マテリアライズドビューの保存場所 (カタログ エクスプローラーでは使用できません)。

  • 一部の情報は、有効になっている場合にのみ結果に含まれます。

    • 有効な場合のクラスタリング列。
    • 削除ベクトルが有効かどうか( true場合にのみ表示されます)。
    • 行トラッキングが有効かどうか( trueの場合にのみ表示されます)。
SQL
-- As table:
DESCRIBE TABLE EXTENDED sales;

-- As a single JSON object:
DESCRIBE TABLE EXTENDED sales AS JSON;

プログラムによるイベントログのクエリ

マテリアライズドビューの更新履歴の詳細、または更新が行われているときの詳細を取得するには、プログラムでイベント ログをクエリできます。

パイプラインの所有者は、他のユーザーがパイプラインのイベント ログを照会できるようにする ビュー を作成できます。次のクエリは、他のユーザーがイベント ログをクエリするために使用できるビューを作成します。このクエリは、 TABLE値関数を使用して正しいイベント ログ テーブルをクエリします。

SQL
CREATE VIEW my_event_log_view AS
SELECT *
FROM event_log(TABLE(<catalog_name>.<schema_name>.<mv_name>));

イベント ログ ビューをクエリするには、次のようなクエリを使用します。

SQL
SELECT *
FROM my_event_log_view
WHERE event_type = "update_progress"
ORDER BY timestamp desc;

パイプライン所有者としてイベント ログを直接クエリするには、ビューを作成する必要はありません。次のサンプル クエリのように、 TABLE値関数を使用してデータを直接クエリできます。

SQL
SELECT *
FROM event_log(TABLE(<catalog_name>.<schema_name>.<mv_name>))
WHERE event_type = "update_progress"
ORDER BY timestamp desc;

イベント ログを使用したサンプル クエリの完全なリストについては、 「基本的なクエリの例」を参照してください。

マテリアライズドビューの実行を監視する

ワークスペース全体でパイプラインの実行を監視するには、 ジョブとパイプライン ページ、 書き込みー履歴 ページを使用するか、イベント ログをクエリすることでプログラム的に実行できます。

UI でマテリアライズドビュー実行をすべて表示する

「ジョブ & パイプライン」ページを使用してワーク スペース全体のさまざまなオーケストレーション ジョブのステータスを監視する場合、そこで作成されたすべてのマテリアライズドビューとストリーミング テーブルを追跡することもできます。 Databricks SQLで作成された各マテリアライズドビューには、それを裏付けるパイプラインがあります。 アクセスできるすべてのマテリアライズドビューとストリーミングテーブルを表示するには:

  1. クリックワークフロー アイコン。ワークスペースの左側にある [ジョブとパイプライン] ボタンをクリックします。
  2. [パイプライン] トグルをクリックして、ビューをパイプラインのみにフィルターします。
  3. パイプライン タイプ ボタンをクリックし、 MV/ST を選択して、 Databricks SQLによって作成されたパイプラインのみにフィルターします。
  4. 「自分がアクセス可能」 フィルターをクリックすると、アクセスできるすべてのパイプラインが表示されます。

最近の実行ステータスの概要ビューを含め、組織全体で作成されたすべてのマテリアライズドビューとストリーミング テーブルを確認できるようになります。 パイプラインの名前をクリックすると、パイプラインモニタリングの詳細ページが開き、詳細な情報が表示されます。 パイプラインモニタリングの詳細ページの詳細については、 「失敗した更新のトラブルシューティング」を参照してください。

クエリ履歴を使用して実行を表示する

[成績ー履歴] タブに慣れている場合は、実行中のSQLウェアハウスへの少なくともCAN VIEWアクセス権を持つすべてのクエリの以前の実行をすべて表示するためにこのタブを使用することもできます。 クエリ履歴ページを使用して、クエリの詳細とクエリ プロファイルにアクセスできます。これらは、ストリーミング テーブルの更新を実行するために使用されるLakeFlow宣言型パイプライン内のパフォーマンスの低いクエリやボトルネックを特定するのに役立ちます。 クエリ履歴とクエリ プロファイルで利用できる情報の種類の概要については、 「クエリ履歴」「クエリ プロファイル」を参照してください。

備考

プレビュー

この機能はパブリック プレビュー段階です。ワークスペース管理者は、 プレビュー ページからこの機能へのアクセスを制御できます。「Databricks プレビューの管理」を参照してください。

マテリアライズドビューに関連するすべてのステートメントがクエリ履歴に表示されます。 ステートメント ドロップダウン フィルターを使用して、任意のコマンドを選択し、関連するクエリを検査できます。すべてのCREATEステートメントの後には、パイプラインで非同期に実行されるREFRESHステートメントが続きます。REFRESHステートメントには通常、パフォーマンスの最適化に関する情報を提供する詳細なクエリ プランが含まれます。

クエリ履歴 UI でREFRESHステートメントにアクセスするには、次のステップを使用します。

  1. クリック履歴アイコン。左側のサイドバーに ある履歴ー
  2. ステートメント ドロップダウン・フィルターから REFRESH チェック・ボックスを選択します。
  3. クエリ ステートメントの名前をクリックすると、クエリの実行時間や集計されたメトリックなどの概要の詳細が表示されます。
  4. クエリ プロファイルを開くには、[クエリ プロファイルを表示 ] をクリックします。クエリ プロファイルのナビゲートの詳細については、 「クエリ プロファイル」を参照してください。
  5. 必要に応じて、 [クエリ ソース] セクションのリンクを使用して、関連するクエリまたはパイプラインを開きます。

CREATE MATERIALIZED VIEWを参照してください。

失敗した更新のトラブルシューティング

ジョブとパイプラインのリストを調べると、マテリアライズドビュー (またはストリーミング テーブル) の失敗した更新を見つけることができます。 失敗したアップデートのトラブルシューティングを行うには、パイプラインモニタリングの詳細ページまたはイベント ログを使用します。

増分である必要があると思われる更新がいっぱいになった場合のトラブルシューティングを行うには、まず、ソース Delta テーブルで 行追跡が有効になっている ことを確認します。増分更新の詳細については、「 マテリアライズドビュー のインクリメンタル 更新のサポート」を参照してください。

パイプライン監視ページから、またはプログラムでイベント ログをクエリすることによって、追加の詳細を取得できます。

パイプラインモニタリングページの使い方

失敗したマテリアライズドビュー (またはストリーミング テーブル) に関する詳細を取得するには、パイプライン モニタリング ページを使用して問題をデバッグできます。 各マテリアライズドビューの背面にはパイプラインが付いています。 パイプラインモニタリングページには、次のような情報が含まれています。

  • 最後の実行のステータスと実行履歴。
  • 最後の実行期間。
  • マテリアライズドビューが完全に更新されるか、段階的に更新されるか。 マテリアライズドビューを増分更新する方法の詳細については、 「マテリアライズドビューの増分更新のサポート」を参照してください。
  • より詳細なデバッグのためのイベント ログ。マテリアライズドビューの更新に失敗した場合、またはその他の問題が発生した場合は、問題パネルをクリックしてログを詳細に表示します。

マテリアライズドビューのトラブルシューティングを行うには:

  1. ワークスペースで、ワークフロー アイコン。左側のナビゲーション バーにある [ジョブとパイプライン] ボタン。
  2. リスト内のパイプラインの名前をクリックします。
  3. 更新の実行に失敗した場合、UI の下部パネルにエラー (またはエラーのリスト) が表示されます。
  4. ログを表示する ためのボタンをクリックするか、問題パネルをクリックしてエラーの詳細を表示します。
  5. これにより、イベント ログ UI が開きます。各エラーには、概要メッセージと概要に加え、詳細を示す JSON タブがあります。Databricks Assistant の問題を修正するには、 [エラーの診断] をクリックします。

パイプラインモニタリングページの詳細については、こちら をご覧ください。

マテリアライズドビューの更新履歴をクエリする

イベント ログは、ワークスペース全体で更新ステータスや期間を監視するためのダッシュボードを設定する場合や、UI を使用するよりもプログラムによるモニタリングを好む場合に役立ちます。 Databricks SQLで作成されたマテリアライズドビューは、メタストアへのイベント ログの保存をサポートしていないため、マテリアライズドビューの所有者のみがイベント ログを直接クエリできます。

マテリアライズドビューに対する REFRESH 操作のステータス (現在および過去の更新を含む) を表示するには、 Lakeflow 宣言型パイプライン イベント ログをクエリします。

SQL
SELECT *
FROM event_log(TABLE(<fully-qualified-table-name>))
WHERE event_type = "update_progress"
ORDER BY timestamp desc;

<fully-qualified-table-name> 、カタログとスキーマを含むマテリアライズドビューの完全修飾名に置き換えます。 パイプラインの所有者でない場合は、まずイベント ログをクエリするためのビューを作成する必要があります。「プログラムによるイベント ログのクエリ」を参照してください。

マテリアライズドビューに対して発生した更新のタイプを問い合わせます

一部のクエリは増分的に更新できます。増分更新を実行できない場合は、代わりに完全更新が実行されます。

マテリアライズドビューの更新タイプを確認するには、イベント ログをクエリします。

SQL
SELECT timestamp, message
FROM event_log(TABLE(my_catalog.my_schema.sales))
WHERE event_type = 'planning_information'
ORDER BY timestamp desc;

このコマンドのサンプル出力:

    • timestamp
    • message
    • 2025-03-21T22:23:16.497+00:00
    • Flow 'sales' has been planned in :re[LDP] to be executed as ROW_BASED.

カスタムタグを使用してSQLウェアハウスにコストを割り当てる

タグは請求レコードに自動的に追加されることはありませんが、クエリでタグを請求情報に手動で結合することができます。

Catalog Explorer で各マテリアライズドビュー (またはストリーミング テーブル) にタグを追加した後、 table_tagsおよびbillingシステムテーブルを結合することでマテリアライズドビューのコストを監視できます。 これはDatabricks SQLで作成されたすべてのマテリアライズドビューとストリーミング テーブルの請求レコードを取得し、テーブル レベルのタグを追加するサンプル クエリです。

SQL
SELECT
u.*,
tag_info.tags
FROM
system.billing.usage u
LEFT JOIN (
SELECT
t.catalog_name,
t.schema_name,
t.table_name,
collect_list(named_struct('tag_name', t.tag_name, 'tag_value', t.tag_value)) AS tags
FROM
main.information_schema.table_tags t
GROUP BY
t.catalog_name,
t.schema_name,
t.table_name
) tag_info
ON tag_info.catalog_name = u.usage_metadata.uc_table_catalog
AND tag_info.schema_name = u.usage_metadata.uc_table_schema
AND tag_info.table_name = u.usage_metadata.uc_table_name
WHERE usage_metadata.uc_table_name is not null;

同じ考え方を使用して、代わりにcolumn_tagsテーブルの列タグを結合することもできます。