Skip to main content

anomaly-detection

Schema-level anomaly detection for Databricks Unity Catalog using the Data Quality API (Public Preview). Automatically monitors table freshness and completeness using ML models. Use when setting up schema-wide data reliability monitoring, detecting stale or incomplete tables, configuring anomaly detection alerts, or querying the system results table. **Auto-triggered by Silver and Gold layer setup workflows** to ensure every new schema has baseline freshness/completeness monitoring from day one.

跳到安装

来源信息

仓库
databricks-solutions/vibe-coding-workshop-template
最近来源活动
2026年8月31日 03:48
检测到的 SKILL.md 语言
英语
星标
6
分支
7

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

文件资源管理器
7 个文件

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
anomaly-detection
description
Schema-level anomaly detection for Databricks Unity Catalog using the Data Quality API (Public Preview). Automatically monitors table freshness and completeness using ML models. Use when setting up schema-wide data reliability monitoring, detecting stale or incomplete tables, configuring anomaly detection alerts, or querying the system results table. **Auto-triggered by Silver and Gold layer setup workflows** to ensure every new schema has baseline freshness/completeness monitoring from day one.
clients
["ide_cli","genie_code"]
bundle_resource
monitors
deploy_verb
bundle_deploy
deploy_note
Schema-level anomaly detection (Data Quality API) on the per-user prefixed schema; deployed via `bundle deploy --target dev` (runDatabricksCli on Genie Code).
coverage
full
metadata
{"author":"prashanth subrahmanyam","version":"1.1","domain":"monitoring","role":"worker","pipeline_stage":7,"pipeline_stage_name":"observability","triggers":["anomaly detection","freshness","completeness","stale tables","unhealthy tables","schema monitoring","silver setup","gold setup","silver layer","gold layer","schema setup"],"called_by":["observability-setup","silver-layer-setup","gold-layer-setup"],"standalone":true,"last_verified":"2026-08-30","volatility":"medium","verification_sources":[{"url":"https://databricks-sdk-py.readthedocs.io/en/latest/workspace/dataquality/data_quality.html","check_for":"DataQualityAPI method signatures: create_monitor(monitor), delete_monitor(object_type, object_id), get_monitor(object_type, object_id), update_monitor(object_type, object_id, monitor, update_mask), list_monitor"},{"url":"https://databricks-sdk-py.readthedocs.io/en/latest/dbdataclasses/dataquality.html","check_for":"Monitor, AnomalyDetectionConfig field names (excluded_table_full_names), object_type/object_id semantics"},{"url":"https://learn.microsoft.com/en-us/azure/databricks/data-quality-monitoring/anomaly-detection/","check_for":"Anomaly detection overview, freshness/completeness concepts, enable/disable workflow"},{"url":"https://learn.microsoft.com/en-us/azure/databricks/data-quality-monitoring/anomaly-detection/results","check_for":"system.data_quality_monitoring.table_results schema, nested struct fields (freshness, completeness, downstream_impact)"}],"upstream_sources":[{"name":"databricks-sdk-py","repo":"databricks/databricks-sdk-py","paths":"[Truncated]","relationship":"reference","last_synced":"2026-08-30","sync_commit":"latest"}]}
## Overview Anomaly Detection is a **schema-level** monitoring capability that automatically assesses data quality by evaluating **freshness** (is the table up-to-date?) and **completeness** (did we get the expected number of rows?). It uses ML models built from historical patterns — no custom metric definitions needed. **API Status:** Public Preview (`POST /api/data-quality/v1/monitors`) **SDK Module:** `databricks.sdk.service.dataquality` ### When to Use This Skill vs. Lakehouse Monitoring | Question | Use This Skill | Use Lakehouse Monitoring | |----------|---------------|------------------------| | "Did my pipeline break?" | **Yes** — detects stale/incomplete tables | No | | "Is my revenue trending correctly?" | No | **Yes** — custom AGGREGATE/DERIVED/DRIFT metrics | | "Which tables are unhealthy?" | **Yes** — schema-wide scan | No (per-table only) | | "What's the average transaction value?" | No | **Yes** — custom business KPIs | | "How quickly can I set up monitoring?" | **Yes** — minutes (enable on schema) | 2+ hours (custom metrics per table) | | "Do I need ML model monitoring?" | No | **Yes** — `InferenceLogConfig` support | **Use both together** for comprehensive monitoring: anomaly detection for baseline reliability + custom metrics for business KPIs. ## Core Concepts ### Freshness Analyzes commit history to build a per-table model predicting next commit time. If a commit is unusually late, the table is marked **stale**. ### Completeness Analyzes historical row counts to predict expected rows in the last 24 hours. If actual rows fall below the lower bound, the table is marked **incomplete**. ### Intelligent Scanning Automatically aligns scan frequency with table update cadence. High-impact tables (by popularity and downstream usage) are prioritized; less critical tables are scanned less frequently. ### Results Storage All results are stored in the system table: ``` system.data_quality_monitoring.table_results ``` **Access:** Only account admins by default. Grant access to others as needed. ## Quick Start ### Enable via UI (Simplest) 1. Navigate to schema in Catalog Explorer 2. Click **Details** tab 3. Click **Enable** under Data Quality Monitoring 4. Click **Save** ### Enable via SDK ```python from databricks.sdk import WorkspaceClient from databricks.sdk.service.dataquality import Monitor, AnomalyDetectionConfig w = WorkspaceClient() # Get schema UUID (required — NOT the three-level name) schema_info = w.schemas.get(full_name=f"{catalog}.{schema}") schema_id = schema_info.schema_id # Enable anomaly detection monitor = w.data_quality.create_monitor( monitor=Monitor( object_type="schema", object_id=schema_id, anomaly_detection_config=AnomalyDetectionConfig( excluded_table_full_names=[ f"{catalog}.{schema}.staging_table", # Optional: tables to skip ] ) ) ) ``` ### Disable via SDK ```python w.data_quality.delete_monitor( object_type="schema", object_id=schema_id ) ``` **Warning:** Disabling deletes ALL anomaly detection tables and information. This cannot be undone. ## Critical Rules ### Rule 1: create_monitor() Takes a Monitor Object with UUID ```python # ✅ CORRECT: Wrap in Monitor object, use schema UUID schema_info = w.schemas.get(full_name=f"{catalog}.{schema}") w.data_quality.create_monitor( monitor=Monitor(object_type="schema", object_id=schema_info.schema_id, ...) ) # ❌ WRONG: Three-level name, keyword args instead of Monitor object w.data_quality.create_monitor(object_id=f"{catalog}.{schema}", ...) ``` ### Rule 2: Permissions Required To create/manage a **schema** monitor (anomaly detection), the caller must have **either** of these sets (per the Data Quality Monitoring API): - **(a)** `MANAGE` **and** `USE_CATALOG` on the schema's parent catalog, **or** - **(b)** `USE_CATALOG` on the parent catalog **plus** `MANAGE` **and** `USE_SCHEMA` on the schema. (The Catalog Explorer UI states it more simply: `MANAGE` on the schema or its parent catalog.) - To view table health indicators: `SELECT` or `BROWSE` on the tables. - To query results: **SELECT** on `system.data_quality_monitoring.table_results` ### Rule 3: System Table Access Is Restricted The results table contains data from ALL catalogs in the metastore. **Use caution when granting access** — it includes sample values from every monitored table. ### Rule 4: Anomaly Detection Does NOT Monitor Views Only tables are scanned. Views are silently skipped. ### Rule 5: Completeness Only Checks Row Counts Completeness does NOT evaluate null fractions, zero values, or NaN. For column-level quality monitoring, use the `lakehouse-monitoring-comprehensive` skill with custom metrics. ## Configuration Options ### Exclude Specific Tables ```python AnomalyDetectionConfig( excluded_table_full_names=[ f"{catalog}.{schema}.staging_raw", f"{catalog}.{schema}.temp_processing", ] ) ``` ### Advanced Configuration (via REST API) For freshness/completeness threshold overrides and table-specific settings, see `references/configuration-guide.md`. ## Querying Results ```sql -- Find all unhealthy tables in a schema SELECT table_name, status, freshness.status as freshness_status, completeness.status as completeness_status, downstream_impact.impact_level, downstream_impact.num_downstream_tables FROM system.data_quality_monitoring.table_results WHERE catalog_name = '{catalog}' AND schema_name = '{schema}' AND status = 'Unhealthy' ORDER BY event_time DESC; ``` For the complete results schema and query patterns, see `references/results-schema.md`. ## Setting Up Alerts ```sql -- Alert on unhealthy tables with downstream impact SELECT CONCAT(catalog_name, '.', schema_name, '.', table_name) AS full_table_name, status, downstream_impact.num_queries_on_affected_tables AS impacted_queries FROM system.data_quality_monitoring.table_results WHERE event_time >= current_timestamp() - INTERVAL 6 HOURS AND status = 'Unhealthy' AND downstream_impact.num_queries_on_affected_tables > :min_tables_affected; ``` For complete alert templates including custom email notifications, see `references/alert-patterns.md`. ## Integration with Silver & Gold Layer Setup **This skill is automatically invoked by `silver-layer-setup` and `gold-layer-setup` orchestrators.** Every new Silver or Gold schema should have anomaly detection enabled to provide baseline freshness/completeness monitoring from day one. ### Reusable Enable Function Use this pattern in setup scripts to enable anomaly detection as part of schema creation: ```python from databricks.sdk import WorkspaceClient from databricks.sdk.service.dataquality import Monitor, AnomalyDetectionConfig def enable_anomaly_detection_on_schema( w: WorkspaceClient, catalog: str, schema: str, excluded_tables: list = None, ): """ Enable anomaly detection on a schema. Safe to call if already enabled. Called by Silver and Gold layer setup workflows to ensure every schema has baseline freshness/completeness monitoring. Args: w: WorkspaceClient catalog: Catalog name schema: Schema name excluded_tables: Optional list of table names to exclude (e.g., staging, quarantine, temp tables) """ schema_info = w.schemas.get(full_name=f"{catalog}.{schema}") schema_id = schema_info.schema_id excluded_full_names = None if excluded_tables: excluded_full_names = [ f"{catalog}.{schema}.{t}" for t in excluded_tables ] try: monitor = w.data_quality.create_monitor( monitor=Monitor( object_type="schema", object_id=schema_id, anomaly_detection_config=AnomalyDetectionConfig( excluded_table_full_names=excluded_full_names ) ) ) print(f"✓ Anomaly detection enabled on {catalog}.{schema}") return monitor except Exception as e: if "already exists" in str(e).lower(): print(f"✓ Anomaly detection already enabled on {catalog}.{schema} (skipping)") else: print(f"⚠️ Could not enable anomaly detection on {catalog}.{schema}: {e}") print(" (Non-blocking — schema setup continues)") ``` ### When Invoked by Silver Layer Setup ```python # After Silver schema creation and DLT pipeline deployment enable_anomaly_detection_on_schema( w, catalog, silver_schema, excluded_tables=["dq_rules"] # Exclude metadata tables ) ``` ### When Invoked by Gold Layer Setup ```python # After Gold tables are created via setup_tables.py enable_anomaly_detection_on_schema( w, catalog, gold_schema, excluded_tables=None # Monitor all Gold tables ) ``` ### Why Enable at Schema Setup Time? 1. **Freshness baselines start building immediately** — ML models need historical commit patterns 2. **Completeness models train earlier** — more scan cycles = more accurate predictions 3. **Zero cost to enable** — no custom metrics needed, runs automatically 4. **Catches pipeline breaks early** — stale/incomplete tables detected before anyone queries them 5. **Complements custom metrics** — anomaly detection for reliability, Lakehouse Monitoring for business KPIs ## Workflow | Phase | Duration | Activities | |-------|----------|------------| | Phase 1: Enable | 5 min | Enable anomaly detection on schema via UI or SDK | | Phase 2: Wait | 15-30 min | First scan runs automatically | | Phase 3: Review | 10 min | Check results in Catalog Explorer or system table | | Phase 4: Alerts | 15 min | Set up SQL alerts on system table | ## Reference Files ### [configuration-guide.md](references/configuration-guide.md) Complete configuration reference including: - REST API endpoint and request schema - SDK-based enable/disable patterns - `excluded_table_full_names` configuration - Advanced threshold overrides (freshness, completeness) - Table skip/scan lists - Event timestamp column configuration ### [results-schema.md](references/results-schema.md) System results table documentation including: - Full schema of `system.data_quality_monitoring.table_results` - Nested struct documentation (freshness, completeness, downstream_impact, root_cause_analysis) - Query patterns for common scenarios - Metastore-level dashboard template reference ### [alert-patterns.md](references/alert-patterns.md) SQL alert configuration including: - Alert query template with downstream impact filtering - Custom email notification template - Alert configuration steps - Integration with Databricks SQL Alerts ## Scripts ### [enable_anomaly_detection.py](scripts/enable_anomaly_detection.py) SDK-based anomaly detection management including: - Enable on schema with optional table exclusions - Disable (with warning about data deletion) - List monitored schemas - Check monitor status ### [query_results.py](scripts/query_results.py) Results querying utilities including: - Query unhealthy tables - Extract root cause analysis - Filter by freshness/completeness status - Generate summary reports ## Assets ### [alert-query-template.sql](assets/templates/alert-query-template.sql) Ready-to-use SQL query for Databricks SQL Alerts with configurable thresholds and custom email template. ## Limitations - Does NOT support views (only tables) - Completeness does not evaluate null fractions, zero values, or NaN - System table access is restricted to account admins by default - Disabling deletes all monitoring data (irreversible) - Event freshness (based on event time columns) is not supported in the current version ## Troubleshooting ### Monitor Not Detecting Anomalies - **Check permissions:** Ensure MANAGE SCHEMA or MANAGE CATALOG - **Wait for scan:** First scan may take 15-30 minutes - **Check table activity:** Tables that rarely change may be classified as "static" ### Cannot Access Results Table - **Default access:** Only account admins can read `system.data_quality_monitoring.table_results` - **Grant access:** Account admin must grant SELECT on the system table ### Tables Showing as "Training" - **Normal behavior:** New tables need historical data to build ML models - **Wait:** Models improve after several scan cycles ## References - [Anomaly Detection Overview](https://learn.microsoft.com/en-us/azure/databricks/data-quality-monitoring/anomaly-detection/) - [Results Schema](https://learn.microsoft.com/en-us/azure/databricks/data-quality-monitoring/anomaly-detection/results) - [Alert Setup](https://learn.microsoft.com/en-us/azure/databricks/data-quality-monitoring/anomaly-detection/alerts) - [REST API](https://docs.databricks.com/api/azure/workspace/dataquality/createmonitor) - [Python SDK Dataclasses](https://databricks-sdk-py.readthedocs.io/en/latest/dbdataclasses/dataquality.html) ## Summary Anomaly Detection provides automated, schema-level monitoring for table freshness and completeness. It complements the `lakehouse-monitoring-comprehensive` skill's custom business metrics with baseline data reliability monitoring. Enable it in minutes via UI or SDK, query results from the system table, and set up SQL alerts for proactive notification. ## Version History - **2026-08-30** — Aligned Rule 2 permission wording to the live Data Quality Monitoring API: a schema monitor requires either `MANAGE` + `USE_CATALOG` on the parent catalog, or `USE_CATALOG` on the catalog + `MANAGE` + `USE_SCHEMA` on the schema; added the `SELECT`/`BROWSE` requirement for health indicators. Bumped `last_verified` and upstream `last_synced`.
在 GitHub 查看