データ品質の管理は単一の仕組みでは完結しません。Databricksでは「パイプライン内の品質制御(DLT Expectations)」「テーブルレベルの制約(Delta Constraints)」「統計的な品質監視(Lakehouse Monitor)」「閾値ベースの通知(SQL Alerts)」の4層を組み合わせることで、検出から通知・改善まで一気通貫の品質戦略を構築できます。
各層は対象フェーズと検出タイミングが異なります。パイプラインの上流から下流へ、予防→検出→監視→通知の順で防御線を張る設計です。
| 層 | 機能 | 対象フェーズ | 検出タイミング | アクション |
|---|---|---|---|---|
| 第1層 | DLT Expectations | パイプライン実行中 | 行レベル(各バッチ) | warn / drop / fail から選択 |
| 第2層 | Delta Constraints | テーブル書き込み時 | 行レベル(INSERT/UPDATE) | 制約違反時にトランザクション拒否 |
| 第3層 | Lakehouse Monitor | テーブル更新後(定期) | カラム統計・ドリフト | メトリクステーブルに記録 |
| 第4層 | SQL Alerts | スケジュール実行 | 集計値の閾値超過 | Slack/Email/Webhook通知 |
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")Expectationsの結果はDLTパイプラインのイベントログに記録され、UIのDAGビューで合格率を確認できます。 Bronze→Silver変換での null除去やフォーマット検証に適しており、Medallionアーキテクチャの品質ゲートとして機能します。
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ツール・ジョブから書き込んでも制約が適用されるため、マルチパイプライン環境で特に有効です。
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つのテーブルを生成します。
MLモデルの入力テーブルに対して適用すると、特徴量の分布変化(データドリフト)を早期検出でき、モデル再学習の判断材料になります。
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 Expectations | Delta Constraints | Lakehouse Monitor | SQL Alerts |
|---|---|---|---|---|
| 適用タイミング | パイプライン実行中 | 書き込み時 | 定期スケジュール | 定期スケジュール |
| 粒度 | 行レベル | 行レベル | カラム統計 | 集計値 |
| DLT必須か | はい | いいえ | いいえ | いいえ |
| 違反時の動作 | warn/drop/fail | トランザクション拒否 | メトリクス記録 | 通知発火 |
| 主な用途 | ETL内の品質ゲート | テーブルの最終防衛線 | ドリフト検出・統計監視 | 運用通知 |
| 導入コスト | DLTパイプラインに限る | ALTER TABLE 1行 | CREATE MONITOR | GUIまたはSQL |
Data Engineer Associate / Professional
問題 1
データエンジニアがDLTパイプラインでBronze→Silverの変換を行っている。amount列が負の値を含む行を除外しつつパイプラインは継続させ、除外した行数をメトリクスとして記録したい。最も適切な方法はどれか。
正解: 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分)に依存します。
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の出題...