Databricksの異常検出を試してみる

こちらの機能です。これで、最近のベータ版機能はカバーしたはずです。

https://docs.databricks.com/aws/ja/lakehouse-monitoring/anomaly-detection

:::note info
**注意**
執筆時点では[ベータ版](https://docs.databricks.com/aws/ja/release-notes/release-types)です。
:::

# Databricksの異常検出とは

[こちら](https://docs.databricks.com/aws/ja/lakehouse-monitoring/anomaly-detection#%E7%95%B0%E5%B8%B8%E6%A4%9C%E5%87%BA%E3%81%A8%E3%81%AF)に説明があるように、[レイクハウスモニタリング](https://docs.databricks.com/aws/ja/lakehouse-monitoring/)の一機能となります。

> レイクハウスモニタリングの異常検出を使用すると、スキーマ内のすべてのテーブルのデータ品質を簡単に監視できます。 Databricks は、データインテリジェンスを活用してデータ品質を自動的に評価し、特に各テーブルの鮮度と完全性を評価します。健康指標には質の高い知見が入力されるため、消費者は健康状態を一目で理解できます。 データ所有者は、ログ記録テーブルとダッシュボードにアクセスできるため、スキーマ全体の異常を迅速に特定、アラートを設定し、解決できます。

# 異常検出はどのように機能しますか

[こちら](https://docs.databricks.com/aws/ja/lakehouse-monitoring/anomaly-detection#%E7%95%B0%E5%B8%B8%E6%A4%9C%E5%87%BA%E3%81%AF%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E6%A9%9F%E8%83%BD%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B)にあるように、テーブルの鮮度と完全性を監視し、予測から逸脱した場合には異常として検出します。

> Databricks は、有効なテーブルの *鮮度* と *完全性* を監視します。
> 
> **鮮度** とは、テーブルが更新された最近の日付を指します。異常検出は、テーブルへのコミットの履歴を分析し、テーブルごとのモデルを構築して、次のコミットの時間を予測します。 コミットが異常に遅延した場合、テーブルは古いものとしてマークされます。時系列テーブルの場合、イベント時間列を指定できます。次に、異常検出は、データの取り込みレイテンシ (コミット時間とイベント時間の差として定義される) が異常に長いかどうかを検出します。
> 
> **完全性** とは、過去 24 時間にテーブルに書き込まれると予想される行数を指します。異常検出では、過去の行数を分析し、このデータに基づいて、予想される行数の範囲を予測します。過去 24 時間にコミットされたローの数がこの範囲の下限より小さい場合、テーブルは未完了としてマークされます。

# 機能の有効化

ワークスペースの[Preview](https://docs.databricks.com/aws/ja/admin/workspace-settings/manage-previews)ページで**Data quality monitoring with anomaly detection (workspace level)** を有効にします。

![Screenshot 2025-04-12 at 20.35.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/fbab2a7a-6aa0-424b-955b-8d3ced4cf3d1.png)

異常検出は**スキーマ(データベース)単位**で有効化します。カタログエクスプローラで対象のスキーマにアクセスし、**Advanced**にある**異常検出**を有効にします。

![Screenshot 2025-04-12 at 20.37.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/2bfe602d-1801-451a-b807-31acc7362649.png)
![Screenshot 2025-04-12 at 20.38.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/23dad925-2f6d-4e3c-852f-87a8f0a8f0f9.png)

これによって、スキーマを監視するジョブが作成されます。このジョブは6時間周期で実行されます。

![Screenshot 2025-04-14 at 8.12.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/0c091983-78e3-424f-ae2e-be25387ee097.png)

# 検出結果の確認

ジョブの実行結果にダッシュボードへのリンクが表示されます。

![Screenshot 2025-04-12 at 20.40.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e41cfb33-d5d6-4cc1-9a87-2e45a99fab52.png)

異常(Unhealthy)と判定されたテーブルの数などを確認できます。

![Screenshot 2025-04-14 at 8.12.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c689a403-e762-45f5-a6f3-7dea259a08e8.png)
![Screenshot 2025-04-14 at 8.12.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f676f0c4-06bb-4fd5-9293-7d86856ec6ad.png)

検出理由を確認することもできます。更新時刻が予測よりも遅れており、鮮度に問題ありという結果になっています。完全性の検出には過去7日の履歴が必要ということなので、今回は検出されていません。

![Screenshot 2025-04-14 at 8.12.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/50991fcb-8b30-4994-a5e8-ca25143afaee.png)

ページを**Table Quality Details**に切り替えると、テーブルを選択してより詳細な情報を確認することができます。

![Screenshot 2025-04-14 at 8.13.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/56a74cc5-42f9-4c63-9ee4-ab5a41ded07e.png)

また、カタログエクスプローラでテーブルにアクセスすると異常検出の結果を確認できます。

![Screenshot 2025-04-14 at 8.08.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f7ff6ee0-0917-4c9f-9488-6242091cd518.png)
![Screenshot 2025-04-14 at 10.05.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b7746e97-ed46-4bab-8f29-886739103f3e.png)


### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)