Databricks SDK for Python を試してみた

## 概要

Databricks SDK for Python という アカウント、ワークスペース、関連リソースの操作を行う Python ライブラリを検証したので、その内容を共有します。

## Databricks SDK について

### 概要

Databricks SDK を利用することで、今まで Databricks CLI や REST API 経由で実施してような シークレット作成などをコードにより実行できるようになります。Databricks SDK は次の言語で利用できます。

- [Databricks SDK for Python](https://learn.microsoft.com/ja-jp/azure/databricks/dev-tools/sdk-python)
- [Databricks SDK for Java](https://learn.microsoft.com/ja-jp/azure/databricks/dev-tools/sdk-java)
- [Databricks SDK for Go](https://learn.microsoft.com/ja-jp/azure/databricks/dev-tools/sdk-go)

Databricks Workspace 上で、特に認証設定等を行わずに、Databricks SDK for Python を利用することができました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/27f5b775-82a5-a845-6dd1-9bdd1dabff89.png)

Databricks SDK for Python のドキュメントも公開されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/55b6d0c1-3589-d015-d61c-a7ca07d585bd.png)

引用元：[Databricks SDK for Python (Beta) — Databricks SDK for Python alpha documentation (databricks-sdk-py.readthedocs.io)](https://databricks-sdk-py.readthedocs.io/en/latest/)

利用例が Github 上に大量にあり、ほぼ利用ケースを網羅されているため、利用開始に困ることはありませんでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/f980fc2c-a7f2-fe41-4e17-bfc548c11b09.png)

引用元：[databricks-sdk-py/examples/secrets/list_acls_secrets.py at main · databricks/databricks-sdk-py (github.com)](https://github.com/databricks/databricks-sdk-py/blob/main/examples/secrets/list_acls_secrets.py)


## 検証

### インストールと動作確認

```python
%pip install databricks-sdk --upgrade -q
```

```python
dbutils.library.restartPython()
```

```python
# 動作確認（クラスターの一覧を表示）
from databricks.sdk import WorkspaceClient
 
w = WorkspaceClient()
 
for c in w.clusters.list():
  print(c.cluster_name)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/1e72ba0c-df33-0f0c-4bb7-da41ad658482.png)

### Databricks トークンの作成

```python
import time

token = w.tokens.create(comment=f'sdk-{time.time_ns()}', lifetime_seconds=300)
```

```python
print(token.token_info.token_id)
```

```python
# cleanup
w.tokens.delete(token_id=token.token_info.token_id)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/de812683-1a1f-0dab-072d-2ca1ff39cb09.png)

### シークレットの登録

```python
from databricks.sdk.core import DatabricksError
```

```python
# scope 名をセット
scope_name = 'qiita'
```

```python
# scope を作成
 
try:
    w.secrets.create_scope(scope=scope_name)
except DatabricksError:
    print(f"Scope `{scope_name}` already exists!")
```

```python
# Scoep を確認
scopes = w.secrets.list_scopes()
 
for scope in scopes:
    if scope.name == scope_name:
        print(scope.as_dict())
```

```python
# シークレットの項目名と値をセット
scope_key_and_values = {
    "value_01": "qiita_article_01",
    "value_02": "qiita_article_02",
}
```

```python
# シークレットを登録
for key,value in scope_key_and_values.items():
    w.secrets.put_secret(
        scope=scope_name,
        key=key,
        string_value=value,
    )
```

```python
# シークレットのリストを表示
scrts = w.secrets.list_secrets(scope=scope_name)
print(scrts)
```

```python
# シークレットを取得できることを確認
print(dbutils.secrets.get(scope_name,"value_01"))
```

```python
# シークレットを削除
w.secrets.delete_scope(scope=scope_name)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/d7988545-9800-d325-3384-29db9f74a9f4.png)