「売上が前日比20%以上下がったら即座に知りたい」「ETLの取込件数がゼロだったらアラートを出したい」 ——こうしたビジネスメトリクスの異常検知は、Databricks SQL Alertsで実現できます。 SQLクエリの実行結果に条件を設定し、条件を満たしたときにEmail・Slack・Webhook等に自動通知する仕組みです。 この記事では、Alertの作成手順、クエリ設計、通知先の構成、そしてJobs Notificationとの使い分けを整理します。
SQL Alertは以下の3つの要素で構成されます。
Alertはスケジュールに基づいて定期的にクエリを実行し、条件を評価します。 条件を満たした場合に通知を送信し、満たさなくなったら通知を停止します。
Databricks SQL Editorで、監視したいメトリクスを返すクエリを作成します。 Alertの条件評価では、クエリ結果の最初の行・最初のカラムの値が使われます。 したがって、クエリは数値1つを返すように設計します。
-- 例1: 直近1時間のエラー件数を監視
SELECT COUNT(*) AS error_count
FROM catalog.schema.application_logs
WHERE log_level = 'ERROR'
AND event_time > CURRENT_TIMESTAMP() - INTERVAL 1 HOUR;
-- 例2: 日次ETLの取込件数がゼロかを監視
SELECT COUNT(*) AS ingested_rows
FROM catalog.schema.daily_ingestion_log
WHERE ingestion_date = CURRENT_DATE();
-- 例3: 売上の前日比を監視
SELECT
(today.total_sales - yesterday.total_sales) / yesterday.total_sales * 100
AS daily_change_pct
FROM (
SELECT SUM(amount) AS total_sales
FROM catalog.schema.sales
WHERE order_date = CURRENT_DATE()
) today
CROSS JOIN (
SELECT SUM(amount) AS total_sales
FROM catalog.schema.sales
WHERE order_date = CURRENT_DATE() - INTERVAL 1 DAY
) yesterday;Databricks SQL UIの「Alerts」セクションから新規Alertを作成し、以下を設定します。
| 設定項目 | 説明 | 設定例 |
|---|---|---|
| Query | 評価対象のクエリを選択 | daily_error_count |
| Trigger when | 条件の種類(above / below / equals) | above(〜を超えたとき) |
| Threshold | 閾値 | 100 |
| Column | 評価するカラム | error_count |
| Refresh | 評価間隔 | Every 15 minutes |
| Notification frequency | 通知の送信頻度 | Just once(初回のみ)/ Every time(毎回) |
Notification frequencyが重要です。「Just once」に設定すると、条件が最初に満たされたときのみ 通知が送信され、条件が継続している間は再通知されません。条件が一度解除されてから再度満たされると再通知されます。 「Every time」に設定すると、条件が満たされるたびに毎回通知が送信されます。
Alertがトリガーされたときの通知送信先を設定します。
| 通知先 | 設定方法 | 適用シナリオ |
|---|---|---|
| ワークスペースユーザーのメールアドレスを指定 | 少人数チームへの基本的な通知 | |
| Slack | Alert Destination でSlack Webhookを登録 | チーム共有チャンネルへのリアルタイム通知 |
| Webhook(汎用) | Alert Destination でHTTPSエンドポイントを登録 | カスタム自動化(Lambda / Cloud Functions等) |
| PagerDuty | Alert Destination でPagerDuty Integration Keyを登録 | オンコール対応が必要なクリティカルアラート |
EmailはDatabricksユーザーに直接送信できますが、Slack・Webhook・PagerDutyは 事前に「Alert Destination」を管理者が設定する必要があります。
Webhookに送信されるJSONペイロードには以下の情報が含まれます。
{
"alert_id": "abc-123",
"alert_name": "daily_error_count_high",
"alert_state": "triggered",
"alert_url": "https://workspace.databricks.com/sql/alerts/abc-123",
"query_name": "daily_error_count",
"query_url": "https://workspace.databricks.com/sql/queries/xyz-456",
"column": "error_count",
"value": 152,
"threshold": 100,
"condition": "above"
}-- テーブルの最終更新からの経過時間(時間単位)
SELECT
TIMESTAMPDIFF(HOUR, MAX(updated_at), CURRENT_TIMESTAMP()) AS hours_since_update
FROM catalog.schema.fact_orders;
-- Alertの条件: hours_since_update > 4(4時間以上未更新で通知)-- NULL率が閾値を超えたら通知
SELECT
COUNT(CASE WHEN customer_id IS NULL THEN 1 END) * 100.0 / COUNT(*)
AS null_rate_pct
FROM catalog.schema.transactions
WHERE transaction_date = CURRENT_DATE();
-- Alertの条件: null_rate_pct > 5(NULL率5%超で通知)-- 日次DBU消費量が直近7日平均の1.5倍を超えたら通知
WITH daily AS (
SELECT usage_date, SUM(usage_quantity) AS daily_dbu
FROM system.billing.usage
WHERE usage_date >= CURRENT_DATE() - INTERVAL 8 DAY
GROUP BY usage_date
)
SELECT
MAX(CASE WHEN usage_date = CURRENT_DATE() THEN daily_dbu END)
/ AVG(CASE WHEN usage_date < CURRENT_DATE() THEN daily_dbu END) AS ratio
FROM daily;
-- Alertの条件: ratio > 1.5| 観点 | SQL Alert | Job Notification(email_notifications) |
|---|---|---|
| トリガー条件 | クエリ結果が閾値条件を満たしたとき | ジョブの実行状態が変わったとき(成功/失敗/開始) |
| 主な用途 | ビジネスメトリクスの異常検知 | パイプラインの運用監視 |
| 評価タイミング | スケジュール実行(1分〜数時間間隔) | ジョブ実行ごと(リアルタイム) |
| カスタムロジック | SQL で自由に記述可能 | 固定パターン(on_start / on_success / on_failure) |
| 通知先 | Email / Slack / Webhook / PagerDuty | Email(API定義)/ Webhook(タスク定義) |
| コンピュート | SQL Warehouse(Alert実行時に起動) | ジョブのコンピュートに依存 |
| 設定者 | アナリスト / BIチーム | データエンジニア |
Data Analyst Associate
問題 1
データアナリストが、日次ETLパイプラインの取込件数を監視し、取込件数がゼロの場合にチームのSlackチャンネルに自動通知する仕組みを構築したい。Databricks SQLの機能のみを使用する場合、最も適切な方法はどれか。
正解: B
SQL Alertは、SQLクエリの結果に条件(この場合 = 0)を設定し、条件が満たされたときにAlert Destination(Slack)に自動通知する仕組みです。ダッシュボードの目視確認は自動化ではなく、Job Notificationはジョブ状態の通知であり取込件数の判定はできません。Notebookによる実装は可能ですが「Databricks SQLの機能のみ」という条件に合致しません。
SQL AlertはWarehouseが停止していても評価されますか?
いいえ。SQL Alertはスケジュール実行時にSQL Warehouseを起動してクエリを実行し、結果を評価します。Warehouseが停止中の場合は自動的に起動されますが、Auto Stopが短すぎるとAlert評価のたびに起動コストが発生します。Alertの評価頻度とWarehouseのAuto Stop設定を合わせて最適化することが重要です。
SQL AlertでSlack通知を送る場合、Slack側の設定は何が必要ですか?
Slack側ではIncoming Webhookまたは Slack Appの設定が必要です。Databricks側では通知先(Alert Destination)としてSlackを追加し、WebhookのURLを登録します。通知メッセージにはAlertの名前、トリガーされた値、評価時刻が自動的に含まれます。カスタムメッセージテンプレートの利用も可能です。
SQL AlertとDatabricks Jobs APIの通知(email_notifications)はどう使い分けますか?
SQL Alertは「クエリ結果が特定の条件を満たしたとき」に通知します(例: 売上が閾値を下回った、エラー件数が増加した)。Jobs APIのemail_notificationsは「ジョブの実行状態が変わったとき」に通知します(例: ジョブが失敗した、タイムアウトした)。前者はビジネスメトリクスの監視、後者はパイプラインの運用監視と使い分けます。
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の出題...