Databricks System Table を有効化して監査ログや課金データを取得しよう！


Unity Catalog の機能である System TableがPublic Previewとなり、audit log情報と billing情報が確認出来るようになったという事で早速セットアップして確認してみたいと思います。

https://docs.databricks.com/administration-guide/system-tables/index.html

# System Tableとは？

System Tables は、Databricks がホストする運用データおよび使用データの分析ストアです。

System Tables は、Databricks Platform コンポーネントのパフォーマンス、使用状況、および動作を監視、分析するために使用できます。これらのテーブルをクエリすることで、ユーザはジョブ、ノートブック、ユーザ、クラスタ、MLエンドポイント、SQLウェアハウスがどのように機能し、経時的に変化しているかについての洞察を得ることができます。この履歴データは、パフォーマンスの最適化、問題のトラブルシューティング、使用パターンの追跡、およびデータ駆動型の意思決定に使用できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/92ddb79d-5c9b-bbac-260a-10f76b9f6e29.png)

# System Tableを有効にする

System Tables は、少なくとも 1 つのワークスペースで Unity Catalog を有効化している顧客が利用できます。提供されるデータは、ワークスペースのUnity Catalogのステータスに関係なく、Databricksアカウント内のすべてのワークスペースから収集されますので、１箇所のワークスペース上で有効にするだけで十分です。

システムテーブルを有効にするには、APIコールを使用するか、Databricksノートブックで直接行います。詳細はお使いのクラウドのドキュメントを参照してください。 ([AWS](https://docs.databricks.com/administration-guide/system-tables/index.html) | [Azure](https://learn.microsoft.com/en-us/azure/databricks/administration-guide/system-tables/))

### Databricks ノートブックを利用して有効化する。

[こちらのノートブック](https://sajpstorage.blob.core.windows.net/maruyama/qiita/_enable_system_tables.html)をワークスペース上にインポートして、**metastore管理権限があるユーザー**が実行してください。ノートブックで必要なTokenやMetastoreID などを取得して、API経由で設定を有効化しております。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/6ed9fab0-cb2a-c5ab-c88b-15589077c833.png)

# System Tableを確認する

データエクスプローラを開いて、systemカタログを見ると以下のように、access / billing / lineage などのスキーマが確認できます。これで必要な情報をこのテーブルから取得することが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/3211e94a-165f-4cd4-be8c-bd07ee087771.png)

# どこにデータは保存されているの？

そもそもこのログデータはどこに保存されるのでしょう？それはSystem Tableの詳細タブを確認するとわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/0a3ced25-0606-af8b-2e78-697284c1b551.png)

わかりますでしょうか？ Unity CatalogのDeltaSharingを使って、共有されてたテーブルを見ているのです。つまりデータはDatabricks上で管理されており、Read Onlyでアクセスできるようになっております。そのためストレージコストはかかりませんし、ユーザーによる改ざんも出来ません。DeltaSharing便利ですね。


# 制限事項

現時点では、現時点では、[こちらのマニュアル](https://docs.databricks.com/administration-guide/system-tables/index.html#limitations)を確認すると以下のような制約があるようです。

- リアルタイムのモニタリングには対応していない。データは1日中更新されます。最近のイベントのログが表示されない場合は、後で確認してください。
- システムスキーマsystem.operational_dataとsystem.lineageに空のテーブルが含まれる可能性があります。
- システムスキーマsystem.accessとsystem.billingはパブリックプレビューで、すべての顧客が利用できます。Databricks では、パブリック・プレビューのシステム・スキーマのみを使用することを推奨しています。


# 可視化して分析してみよう。
テーブルの詳細やサンプルはこちらをご覧ください。[audit](https://docs.databricks.com/administration-guide/system-tables/audit-logs.html#)| [billing](https://docs.databricks.com/administration-guide/system-tables/billing.html)

### 日々の使用量をチェック

```sql
SELECT usage_date as `Date`, sum(usage_quantity) as `DBUs Consumed`
  FROM system.billing.usage
GROUP BY usage_date
ORDER BY usage_date ASC
```
<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/952359de-8cb2-1a7c-cf4f-4793fc1cd9a5.png' width='400'>


# Next
次にこれらのデータを使ってもう少し詳細なデータ分析をしてみたいと思います。
少し長くなりますので、別の記事で紹介したいと思います。

https://qiita.com/maroon-db/items/e5c72de40f8b71900afe