Databricks

DatabricksにおけるData Quality Monitorsの実務設計: 4層品質戦略

2026-03-26
更新: 2026-03-27
NicheeLab編集部

データ品質の管理は単一の仕組みでは完結しません。Databricksでは「パイプライン内の品質制御(DLT Expectations)」「テーブルレベルの制約(Delta Constraints)」「統計的な品質監視(Lakehouse Monitor)」「閾値ベースの通知(SQL Alerts)」の4層を組み合わせることで、検出から通知・改善まで一気通貫の品質戦略を構築できます。

4層品質戦略の全体像

各層は対象フェーズと検出タイミングが異なります。パイプラインの上流から下流へ、予防→検出→監視→通知の順で防御線を張る設計です。

機能対象フェーズ検出タイミングアクション
第1層DLT Expectationsパイプライン実行中行レベル(各バッチ)warn / drop / fail から選択
第2層Delta Constraintsテーブル書き込み時行レベル(INSERT/UPDATE)制約違反時にトランザクション拒否
第3層Lakehouse Monitorテーブル更新後(定期)カラム統計・ドリフトメトリクステーブルに記録
第4層SQL Alertsスケジュール実行集計値の閾値超過Slack/Email/Webhook通知

第1層: DLT Expectations(パイプライン内品質制御)

Delta Live Tables(DLT)のExpectationsは、パイプライン定義内に品質ルールを宣言的に埋め込む仕組みです。 各Expectationに対して、違反時の動作(warn / drop / fail)を指定します。

import dlt
from pyspark.sql.functions import col

@dlt.expect_or_drop("valid_amount", "amount > 0")
@dlt.expect_or_fail("not_null_user_id", "user_id IS NOT NULL")
@dlt.expect("valid_email", "email LIKE '%@%'")
@dlt.table(comment="品質検証済みの注文データ")
def orders_clean():
    return dlt.read("orders_raw").filter(col("order_date") >= "2025-01-01")
  • expect: 違反行を含めたまま処理を続行し、メトリクスに記録(warn相当)
  • expect_or_drop: 違反行を除外して処理を続行(隔離パターン)
  • expect_or_fail: 違反行があればパイプライン全体を停止(致命的品質違反向け)

Expectationsの結果はDLTパイプラインのイベントログに記録され、UIのDAGビューで合格率を確認できます。 Bronze→Silver変換での null除去やフォーマット検証に適しており、Medallionアーキテクチャの品質ゲートとして機能します。

第2層: Delta Constraints(テーブルレベル制約)

Delta ConstraintsはDeltaテーブルに対して NOT NULL 制約とCHECK制約を設定する仕組みです。 DLTを使わないバッチ処理やSQLベースのETLでも、テーブル側で最終防衛線を張れます。

-- NOT NULL制約の追加
ALTER TABLE gold.orders
ALTER COLUMN order_id SET NOT NULL;

ALTER TABLE gold.orders
ALTER COLUMN customer_id SET NOT NULL;

-- CHECK制約の追加
ALTER TABLE gold.orders
ADD CONSTRAINT valid_amount CHECK (amount > 0);

ALTER TABLE gold.orders
ADD CONSTRAINT valid_status CHECK (status IN ('pending', 'shipped', 'delivered', 'cancelled'));

-- 制約の確認
DESCRIBE DETAIL gold.orders;

制約違反時はINSERT/UPDATE/MERGEトランザクション全体がロールバックされます。 DLT Expectationsとの違いは、DLTがパイプライン定義に紐づくのに対し、Delta Constraintsはテーブル定義に永続化される点です。 どのETLツール・ジョブから書き込んでも制約が適用されるため、マルチパイプライン環境で特に有効です。

第3層: Lakehouse Monitor(統計的品質監視)

Lakehouse MonitorはUnity Catalogのマネージドテーブルに対して、カラム統計(null率、平均、分布)やデータドリフトを定期的に計測する機能です。 スナップショット分析またはタイムシリーズ分析の2モードがあります。

-- Lakehouse Monitorの作成(SQL)
CREATE MONITOR gold.orders
WITH (
  PROFILE_TYPE = 'SNAPSHOT',
  SCHEDULE = CRON '0 8 * * *',    -- 毎朝8時に実行
  OUTPUT_SCHEMA = gold
);

-- タイムシリーズモードの場合
CREATE MONITOR gold.daily_metrics
WITH (
  PROFILE_TYPE = 'TIME_SERIES',
  TIMESTAMP_COL = 'event_date',
  GRANULARITIES = ('1 day'),
  SCHEDULE = CRON '0 9 * * *',
  OUTPUT_SCHEMA = gold
);

Monitorは自動的に2つのテーブルを生成します。

  • profile_metrics: 各カラムのnull率、distinct数、平均値、最小/最大値、分布ヒストグラム等
  • drift_metrics: ベースラインとの比較によるドリフトスコア(KLダイバージェンス、JSダイバージェンス等)

MLモデルの入力テーブルに対して適用すると、特徴量の分布変化(データドリフト)を早期検出でき、モデル再学習の判断材料になります。

第4層: SQL Alerts(閾値ベース通知)

SQL Alertsは、SQLクエリの結果が閾値を超えた場合に通知を送る仕組みです。 Lakehouse Monitorのメトリクステーブルや、独自の品質チェッククエリに対して設定します。

-- アラート用クエリ例: null率が5%を超えたカラムを検出
SELECT
  column_name,
  ROUND(percent_nulls * 100, 2) AS null_pct
FROM gold.profile_metrics
WHERE log_date = CURRENT_DATE()
  AND percent_nulls > 0.05
ORDER BY null_pct DESC

このクエリをDatabricks SQL Alertに登録し、「結果行が1行以上存在する場合」にSlackチャンネルへ通知する設定にします。 評価間隔は最短1分から設定可能です。

アラート連携フロー

4層が連携する典型的なフローを整理します。

[Raw Data]
  │
  v
[DLT Pipeline]
  ├─ Expectation: expect_or_drop("valid_amount", "amount > 0")
  ├─ Expectation: expect_or_fail("not_null_id", "id IS NOT NULL")
  │   → 違反行は隔離/停止、メトリクスはイベントログに記録
  v
[Silver/Gold Table]
  ├─ Delta Constraint: CHECK (amount > 0), NOT NULL (id)
  │   → 制約違反時はトランザクション拒否
  v
[Lakehouse Monitor] (毎朝8時)
  ├─ profile_metrics: null率、分布、統計量
  ├─ drift_metrics: ベースラインからのドリフト
  v
[SQL Alert] (結果行 > 0 で発火)
  └─ Slack / Email / Webhook → 運用チームが調査

各層の使い分け判断基準

判断軸DLT ExpectationsDelta ConstraintsLakehouse MonitorSQL Alerts
適用タイミングパイプライン実行中書き込み時定期スケジュール定期スケジュール
粒度行レベル行レベルカラム統計集計値
DLT必須かはいいいえいいえいいえ
違反時の動作warn/drop/failトランザクション拒否メトリクス記録通知発火
主な用途ETL内の品質ゲートテーブルの最終防衛線ドリフト検出・統計監視運用通知
導入コストDLTパイプラインに限るALTER TABLE 1行CREATE MONITORGUIまたはSQL

実務設計のベストプラクティス

  • Bronze→Silver変換ではDLT Expectations(expect_or_drop)でnull除去・フォーマット検証を行う
  • Goldテーブルには必ずDelta Constraints(NOT NULL + CHECK)を設定し、多経路書き込みでも品質を保証する
  • MLモデルの入力テーブルにはLakehouse Monitor(TIME_SERIES)を設定し、特徴量ドリフトを毎日検出する
  • profile_metricsの異常値検出クエリをSQL Alertに登録し、Slackで運用チームに即時通知する
  • Expectationsのfail設定は本番に影響が大きいため、最初はwarnで運用し、安定後にfailに移行する

問題で確認

Data Engineer Associate / Professional

問題 1

データエンジニアがDLTパイプラインでBronze→Silverの変換を行っている。amount列が負の値を含む行を除外しつつパイプラインは継続させ、除外した行数をメトリクスとして記録したい。最も適切な方法はどれか。

  1. @dlt.expect_or_drop デコレータで条件 'amount > 0' を指定する
  2. @dlt.expect_or_fail デコレータで条件 'amount > 0' を指定する
  3. ALTER TABLE silver_table ADD CONSTRAINT valid_amount CHECK (amount > 0) を実行する
  4. Lakehouse MonitorでamountカラムのSNAPSHOTプロファイルを設定する

正解: A

expect_or_dropは条件に違反した行を除外してパイプラインを継続させ、除外行数をイベントログに記録します。expect_or_failは違反時にパイプライン全体を停止するため要件に合いません。Delta Constraintsは書き込みを拒否するだけで行の選択的除外はできません。Lakehouse Monitorは事後の統計監視であり、パイプライン内の行フィルタリングには使えません。

よくある質問

DLT ExpectationsとDelta Constraintsはどちらを先に導入すべきですか?

データの流入経路が明確な場合はDLT Expectationsを先に導入し、パイプライン内でデータ品質を制御するのが効果的です。一方、既存のDeltaテーブルに後からガードレールを追加したい場合はDelta Constraints(CHECK / NOT NULL)から始めると既存パイプラインへの影響が少なく導入できます。両者は排他ではなく、DLTで品質違反を検出・隔離し、Deltaテーブル側でも最終防衛線として制約を設定する多層防御が推奨されます。

Lakehouse Monitorのメトリクスはどこに保存されますか?

Lakehouse Monitorは監視対象テーブルと同じスキーマ内にprofile_metricsとdrift_metricsの2つのDeltaテーブルを自動生成します。これらのテーブルはUnity Catalogで管理されるため、通常のSQLでクエリ可能です。メトリクスの保持期間はテーブルの保持ポリシーに従い、Time Travelで過去のスナップショットも参照できます。

SQL Alertsの通知先としてSlack以外に何が使えますか?

SQL Alertsの通知先にはメール、Slack、Webhook(PagerDuty、Microsoft Teams等)が利用可能です。Webhookを使えば任意のHTTPエンドポイントに通知を飛ばせるため、Ops管理ツールやインシデント管理システムとの連携も実現できます。通知頻度はアラートの評価間隔(最短1分)に依存します。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Databricks

Databricks資格一覧|全7試験・難易度・勉強法

Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...

Databricks

Databricks試験の難易度ランキング|全7資格を徹底比較

Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...

Databricks

Databricks資格の勉強方法|最短合格ルートと学習時間の目安

Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...

Databricks

Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略

Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...

Databricks

Databricks Data Engineer Professional完全解説|上級試験の攻略法

Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...

Databricksの記事一覧 (105件)
© 2026 NicheeLab All rights reserved.