Databricksシステムテーブルにおけるクエリー履歴のサポート

こちらのアップデートです。

**Query history system table is now available (Public Preview)**

> Databricksシステムテーブルにクエリー履歴テーブルが追加されました。このテーブルは、あなたのアカウントにおけるSQLウェアハウスで実行されたそれぞれのクエリー実行の詳細なレコードを記録します。このテーブルにアクセスするには、管理者が新たな`query`スキーマを有効化する必要があります。

マニュアルはこちら

https://docs.databricks.com/ja/admin/system-tables/query-history.html

で、これまで自分は、[こちら](https://docs.databricks.com/ja/admin/system-tables/index.html#enable)にあるようにスキーマの有効化にDatabricksのREST APIを使っていたのですが、こちらの記事でより簡単な方法が紹介されていました。

https://www.linkedin.com/posts/activity-7220055486795034624-Yr7u?utm_source=share&utm_medium=member_desktop

こちらで紹介されているように、Databricks SDK for Pythonを使って有効化してみます。あと、すでに同僚の方も試されていました。

https://qiita.com/nakazax/items/6ec113daadb8b52584fb

最新バージョンにアップグレードしておきます。

```py
%pip install databricks-sdk --upgrade
dbutils.library.restartPython()
```

```py
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()

for schema in w.system_schemas.list("<メタストアID>"):
  print(f"スキーマ名: {schema.schema}, 状態: {schema.state}")
```
```
スキーマ名: storage, 状態: SystemSchemaInfoState.AVAILABLE
スキーマ名: access, 状態: SystemSchemaInfoState.ENABLE_COMPLETED
スキーマ名: billing, 状態: SystemSchemaInfoState.ENABLE_COMPLETED
スキーマ名: compute, 状態: SystemSchemaInfoState.AVAILABLE
スキーマ名: marketplace, 状態: SystemSchemaInfoState.AVAILABLE
スキーマ名: query, 状態: SystemSchemaInfoState.AVAILABLE
スキーマ名: workflow, 状態: SystemSchemaInfoState.AVAILABLE
スキーマ名: operational_data, 状態: SystemSchemaInfoState.UNAVAILABLE
スキーマ名: lineage, 状態: SystemSchemaInfoState.UNAVAILABLE
スキーマ名: information_schema, 状態: SystemSchemaInfoState.ENABLE_COMPLETED
```

`query`がAVAILABLEになっています。

上で指定しているメタストアIDはカタログエクスプローラから確認できます。
![Screenshot 2024-07-21 at 10.12.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/9afbd35c-43a5-85de-55e2-3b30a7815868.png)
![Screenshot 2024-07-21 at 10.12.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8ce57ae9-e8c6-f3e8-8d5e-3f32fdbe6a4a.png)

あ、でも以下でもいけました。

```py
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()

for schema in w.system_schemas.list(w.metastores.current().metastore_id):
  print(f"スキーマ名: {schema.schema}, 状態: {schema.state}")
```

有効化します。

```py
w.system_schemas.enable(metastore_id=w.metastores.current().metastore_id, schema_name="query")
```

```py
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()

for schema in w.system_schemas.list(w.metastores.current().metastore_id):
  print(f"スキーマ名: {schema.schema}, 状態: {schema.state}")
```

`query`が`ENABLE_COMPLETED`になりました。
```
スキーマ名: storage, 状態: SystemSchemaInfoState.AVAILABLE
スキーマ名: access, 状態: SystemSchemaInfoState.ENABLE_COMPLETED
スキーマ名: billing, 状態: SystemSchemaInfoState.ENABLE_COMPLETED
スキーマ名: compute, 状態: SystemSchemaInfoState.AVAILABLE
スキーマ名: marketplace, 状態: SystemSchemaInfoState.AVAILABLE
スキーマ名: query, 状態: SystemSchemaInfoState.ENABLE_COMPLETED
スキーマ名: workflow, 状態: SystemSchemaInfoState.AVAILABLE
スキーマ名: operational_data, 状態: SystemSchemaInfoState.UNAVAILABLE
スキーマ名: lineage, 状態: SystemSchemaInfoState.UNAVAILABLE
スキーマ名: information_schema, 状態: SystemSchemaInfoState.ENABLE_COMPLETED
```

カタログエクスプローラからも確認できます。
![Screenshot 2024-07-21 at 10.26.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/744318b1-c9f0-a328-8bf5-88f3d817cc94.png)




### はじめてのDatabricks

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

### Databricks無料トライアル

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