Databricksのシステムテーブルを有効化してみる

最近Databricksで、以下のシステムテーブルが追加されました。

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

- 監査ログ(Audit logs)
- 使用量ログ(Billable usage logs)
- リネージ(Table and column lineage)

いずれも別個の機能でデータを取得することは可能でしたが、今回これら全てがUnity Catalogに統合された形になります。

本書では監査ログと使用量ログを有効化してみます。

# システムテーブルの有効化

デフォルトでは`information_schema`しか有効化されていません。有効化するには、ローカルマシンからアカウントオーナーとしてREST APIを呼び出す必要があります。[jq](https://jqlang.github.io/jq/)をインストールしておくと結果が確認しやすいです。

## 有効化状況の確認

まず、Unity CatalogメタストアのIDを確認します。APIを使う場合はこちら。

```sh
curl -v -X GET -u <アカウントオーナーのメールアドレス>:<パスワード> "https://<ワークスペースのホスト名>/api/2.1/unity-catalog/metastores" | jq
```

以下の`metastore_id`がメタストアIDです。

```json
{
  "metastores": [
    {
      "name": "taka-uc-metastore",
      "storage_root": "<メタストアルートバケット>",
      "default_data_access_config_id": "<資格情報ID>",
      "storage_root_credential_id": "<資格情報ID>",
      "delta_sharing_scope": "INTERNAL",
      "owner": "メタストア管理者",
      "privilege_model_version": "1.0",
      "region": "ap-northeast-1",
      "metastore_id": "<メタストアID>",
      "metastore_account_id": "<DatabricksアカウントID>",
      "created_at": 1672031902957,
      "created_by": "<作成者>",
      "updated_at": 1689054900612,
      "updated_by": "<更新者>",
      "storage_root_credential_name": "<資格情報名>",
      "cloud": "aws",
      "global_metastore_id": "<グローバルメタストアID>",
      "full_name": "taka-uc-metastore",
      "securable_type": "METASTORE",
      "securable_kind": "METASTORE_STANDARD"
    }
  ]
}
```

なお、アカウントコンソールのメタストア詳細画面でも確認できます。バケット名以降のIDです。
![Screenshot 2023-07-27 at 7.56.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/eb577585-a348-4b5b-344b-30d5ba40e11c.png)

システムテーブルの有効化状態を確認します。

```sh
curl -v -X GET -u <アカウントオーナーのメールアドレス>:<パスワード> "https://<ワークスペースのホスト名>/api/2.0/unity-catalog/metastores/<メタストアID>/systemschemas" | jq
```

```json
{
  "schemas": [
    {
      "schema": "operational_data",
      "state": "AVAILABLE"
    },
    {
      "schema": "access",
      "state": "AVAILABLE"
    },
    {
      "schema": "billing",
      "state": "AVAILABLE"
    },
    {
      "schema": "information_schema",
      "state": "ENABLE_COMPLETED"
    }
  ]
}
```

`information_schema`以外は`AVAILABLE`で有効化できることがわかります。

# 監査ログテーブルの有効化

`access`を指定して有効化します。

```sh
curl -v -X PUT -u <アカウントオーナーのメールアドレス>:<パスワード> "https://<ワークスペースのホスト名>/api/2.0/unity-catalog/metastores/4c55425f-e291-45f8-a4e7-29a103c19e29/systemschemas/access" | jq
```

:::note
`operational_data`はプレビュー中のスキーマですので、`access`を有効化してください。
:::

問題なければ空のJSONが返ってきます。

```json
{}
```

データエクスプローラにアクセスします。`system.access.audit`が表示されています。
![Screenshot 2023-07-31 at 9.32.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f65b7cc3-19f3-4da5-3ff2-ae345d94a325.png)


# 使用量ログテーブルの有効化

`billing`を指定して有効化します。

```sh
curl -v -X PUT -u <アカウントオーナーのメールアドレス>:<パスワード> "https://<ワークスペースのホスト名>/api/2.0/unity-catalog/metastores/4c55425f-e291-45f8-a4e7-29a103c19e29/systemschemas/billing" | jq
```

問題なければ空のJSONが返ってきます。

```json
{}
```

データエクスプローラにアクセスします。`system.billing.usage`が表示されています。
![Screenshot 2023-07-27 at 8.06.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/0c4fdf7c-c70b-a9c2-efa0-29cc9c602fab.png)

再度有効化状態を確認してみます。

```json
{
  "schemas": [
    {
      "schema": "operational_data",
      "state": "AVAILABLE"
    },
    {
      "schema": "access",
      "state": "ENABLE_COMPLETED"
    },
    {
      "schema": "billing",
      "state": "ENABLE_COMPLETED"
    },
    {
      "schema": "information_schema",
      "state": "ENABLE_COMPLETED"
    }
  ]
}
```

すぐにはデータは反映されない(1日程度のラグがあるとのこと)ので、データが蓄積されたらこれらを分析してみます。

### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

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