本番テーブルのデータ品質は時間とともに劣化します。スキーマは変わらなくても、NULL率の上昇、値分布の偏り、上流システムの仕様変更による静かなデータ破損は日常的に発生します。Lakehouse Monitoringは、Unity Catalogに登録されたDeltaテーブルに対して統計プロファイルを定期計算し、品質変化やドリフトを自動検知するDatabricksのネイティブ機能です。
この記事では、3つのプロファイルタイプの使い分け、モニター作成の具体的なSQL/API、メトリクステーブルの構造、ダッシュボード自動生成、アラート設定、そしてDatabricks認定試験(MLA/MLP)で問われるポイントを整理します。
Lakehouse Monitoringは、Unity Catalogのマネージドテーブルまたは外部テーブルに対してモニターを作成すると、指定スケジュールで統計量を計算し、結果を2つのメトリクステーブル(profile_metrics、drift_metrics)にDeltaテーブルとして書き出します。計算はServerless Computeで実行されるため、ユーザーがクラスタを用意する必要はありません。
モニター作成時に「プロファイルタイプ」を1つ指定します。プロファイルタイプによって計算される統計量とドリフト検知の方法が異なります。テーブルの性質(静的マスタ/時系列データ/推論ログ)に応じて適切なタイプを選択します。
Lakehouse Monitoringには3つのプロファイルタイプがあり、対象テーブルのデータ特性に応じて選択します。
| プロファイルタイプ | 対象テーブル | 計算内容 | ドリフト検知の基準 |
|---|---|---|---|
| Snapshot | 静的マスタ、ディメンションテーブル | 実行時点のテーブル全体の統計量(平均、分散、NULL率、カーディナリティ等) | 前回スナップショットとの差分比較 |
| TimeSeries | タイムスタンプを持つファクトテーブル、ログデータ | 時間ウィンドウごとの統計量を計算し、ウィンドウ間の変化を追跡 | 隣接する時間ウィンドウ間のKL-divergence、Jensen-Shannon距離等 |
| InferenceLog | ML推論結果テーブル(予測値+入力特徴量) | 予測分布・入力特徴量分布・モデルバージョン別統計量 | ベースラインテーブルとの比較+時間ウィンドウ間比較 |
Snapshotは最もシンプルで、テーブルの「今の状態」を定期記録します。TimeSeriesはtimestamp_colを指定し、granularities(日次、週次等)ごとに集計ウィンドウを切って統計量を計算します。InferenceLogはTimeSeriesの拡張で、prediction_col、model_id_col、label_col(任意)を追加指定することで、MLモデル固有のメトリクス(予測ドリフト、入力ドリフト、モデル間比較)を自動計算します。
モニターの作成はSQL(CREATE MONITOR)またはDatabricks SDK(Python API)で行います。以下はTimeSeriesプロファイルでモニターを作成するSQLの例です。
-- TimeSeriesプロファイルでモニターを作成
CREATE MONITOR catalog.schema.sales_daily
USING TIMESERIES (
TIMESTAMP_COL order_date,
GRANULARITIES ('1 day', '1 week')
)
WITH (
LINKED_ENTITIES (catalog.schema.sales_daily),
SCHEDULE CRON '0 8 * * *',
BASELINE_TABLE catalog.schema.sales_daily_baseline
);Python APIでの同等の操作は以下の通りです。
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.catalog import (
MonitorTimeSeries, MonitorCronSchedule
)
w = WorkspaceClient()
w.quality_monitors.create(
table_name="catalog.schema.sales_daily",
assets_dir="/Shared/monitors/sales_daily",
output_schema_name="catalog.schema",
time_series=MonitorTimeSeries(
timestamp_col="order_date",
granularities=["1 day", "1 week"]
),
schedule=MonitorCronSchedule(
quartz_cron_expression="0 0 8 * * ?",
timezone_id="Asia/Tokyo"
),
baseline_table_name="catalog.schema.sales_daily_baseline"
)InferenceLogの場合はtime_seriesの代わりにinference_logパラメータを指定し、prediction_col、model_id_col、problem_type(classification / regression)を設定します。Snapshotの場合はtime_series / inference_logのいずれも指定しなければSnapshot扱いになります。
モニターが実行されると、指定したoutput_schema内に2つのDeltaテーブルが自動生成されます。
| テーブル | 格納内容 | 主要カラム |
|---|---|---|
| {table_name}_profile_metrics | 各カラムの統計量(平均、標準偏差、NULL比率、min/max、ヒストグラム等) | column_name, data_type, mean, stddev, null_count, distinct_count, quantiles, window |
| {table_name}_drift_metrics | ウィンドウ間またはベースラインとの統計的差異 | column_name, drift_type, chi_square_statistic, ks_statistic, js_distance, wasserstein_distance, window |
profile_metricsはモニター実行のたびにレコードが追加され、時系列で統計量の推移を追跡できます。drift_metricsにはカテゴリカル変数に対するカイ二乗検定、数値変数に対するKS検定・JS距離・Wasserstein距離などの統計的検定結果が記録されます。これらのテーブルは通常のDeltaテーブルなので、Databricks SQLやNotebookから直接クエリして独自の分析やカスタムアラートを構築できます。
モニター作成時にassets_dirを指定すると、Databricks SQLダッシュボードが自動生成されます。このダッシュボードには以下の可視化が含まれます。
ダッシュボードはDatabricks SQLのLakeview Dashboard形式で生成され、assets_dirに格納されます。生成後はダッシュボードを手動でカスタマイズすることも可能です。ただし、モニターを再作成するとダッシュボードも再生成されるため、大幅なカスタマイズを行う場合は別途ダッシュボードをコピーして利用することを推奨します。
Lakehouse Monitoring単体にはアラート通知機能はありません。異常検知時の通知には、drift_metricsテーブルに対するDatabricks SQLアラートを組み合わせます。
-- ドリフトスコアが閾値を超えたカラムを検出するアラートクエリ
SELECT
column_name,
js_distance,
window.start AS window_start,
window.end AS window_end
FROM catalog.schema.sales_daily_drift_metrics
WHERE js_distance > 0.3
AND window.end = (
SELECT MAX(window.end)
FROM catalog.schema.sales_daily_drift_metrics
);このクエリをDatabricks SQLアラートとして登録し、スケジュール実行で結果が1行以上返された場合にメール・Slack・Webhook経由で通知を送信します。閾値の設定は対象データの特性に依存しますが、JS距離で0.1〜0.3が一般的な初期値です。本番運用では閾値を段階的に調整し、誤検知率を下げていきます。
Databricksにはデータ品質を担保する仕組みが複数あります。それぞれの適用タイミングと用途が異なるため、混同しないことが重要です。
| 機能 | 適用タイミング | 対象 | 検知方法 | 主な用途 |
|---|---|---|---|---|
| DLT Expectations | ETLパイプライン実行中(リアルタイム) | DLTパイプラインのレコード | 行単位のルールベース判定(EXPECT, EXPECT OR DROP, EXPECT OR FAIL) | 不正レコードの除外・パイプライン停止 |
| Delta Constraints | テーブルへの書き込み時 | 任意のDeltaテーブル | CHECK制約・NOT NULL制約(違反時に書き込みエラー) | スキーマレベルの整合性保証 |
| Lakehouse Monitoring | テーブル書き込み後(バッチ的・定期実行) | Unity Catalog登録テーブル | 統計的検定によるドリフト検知(KS検定、カイ二乗検定等) | テーブル品質の継続的監視・データドリフト検知 |
典型的な実務構成は、DLT Expectationsで「明らかに不正なレコード」をパイプライン段階で除外し、Delta Constraintsで「テーブルレベルの不変条件」(主キーNOT NULL等)を強制し、Lakehouse Monitoringで「書き込み済みデータの品質が時間経過で劣化していないか」を監視する3層構成です。
Lakehouse MonitoringはDatabricks Certified ML Associate(MLA)およびML Professional(MLP)で「モデル監視」「データドリフト」の文脈で出題されます。主な出題パターンは以下の通りです。
試験では「ドリフト検知=Lakehouse Monitoring」「レコード単位のバリデーション=DLT Expectations」「スキーマ制約=Delta Constraints」という対応を即答できるようにしておくことが重要です。
ML Associate / ML Professional
問題 1
MLエンジニアが本番環境のモデルサービングエンドポイントの推論品質を監視したい。推論ログはUnity CatalogのDeltaテーブルに記録されており、予測値カラム・タイムスタンプカラム・モデルIDカラムが含まれている。入力特徴量のドリフトと予測分布の変化を時系列で追跡するために、最も適切なアプローチはどれか。
正解: A
InferenceLogプロファイルは推論ログテーブル専用のプロファイルタイプで、prediction_col・timestamp_col・model_id_colを指定すると入力特徴量のドリフトと予測分布の変化を自動的に追跡します。DLT Expectationsはパイプライン内のレコード単位バリデーションであり事後的な統計監視には不向き、Delta Constraintsはスキーマレベルの制約でありドリフト検知機能はありません。MLflowは実験管理・モデル管理ツールであり、データドリフトの自動検知機能は持ちません。
Lakehouse MonitoringとDLT Expectationsはどう使い分けますか?
DLT ExpectationsはDelta Live Tablesパイプライン内でレコード単位の品質ルール(NULL禁止、範囲チェック等)をリアルタイムに適用する仕組みです。一方、Lakehouse Monitoringはテーブル全体の統計量を定期的に計算し、時間経過に伴うドリフトや分布変化を検知します。ETL中のバリデーションにはExpectations、ETL後のテーブル品質の継続的監視にはLakehouse Monitoringという使い分けが基本です。
Lakehouse Monitoringの利用にライセンスやコストはかかりますか?
Lakehouse MonitoringはUnity Catalog対応ワークスペースで利用可能です。モニター自体の作成は無料ですが、プロファイル計算はServerless Computeで実行されるため、計算実行時にServerless DBUが消費されます。メトリクステーブルはDelta Tableとして保存されるため、ストレージコストも発生します。大規模テーブルでは計算頻度とカラム数を絞ることでコスト最適化が可能です。
InferenceLogプロファイルはどのような場面で使いますか?
InferenceLogは、MLモデルの推論結果を記録したテーブルに対して使います。予測値カラム・タイムスタンプカラム・モデルIDカラムを指定すると、予測分布の変化、入力特徴量のドリフト、モデルバージョン間の精度差異を自動で追跡します。Model Servingのログテーブルと組み合わせることで、本番モデルの品質劣化を早期に検知できます。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Databricks資格一覧|全7試験・難易度・勉強法
Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...
Databricks試験の難易度ランキング|全7資格を徹底比較
Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...
Databricks資格の勉強方法|最短合格ルートと学習時間の目安
Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...
Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略
Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...
Databricks Data Engineer Professional完全解説|上級試験の攻略法
Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...