Azure DatabricksにおけるUnity Catalog有効化のウォークスルー

以前、こちらの記事を書きましたが、アカウントストレージやマネージドIDのセットアップ手順を端折ってましたので、きちんとウォークスルーします。自分のAzureの知識チェックも兼ねます。

https://qiita.com/taka_yayoi/items/9b56995b979fa4e32b4e

こちらの記事も参考になります。

https://qiita.com/ryoma-nagata/items/25bcf9e89940d88239cb

なお、最近ではUnity Catalogは自動で有効化されるようになっています。こちらでは手動での有効化が必要な場合の手順をまとめています。

https://learn.microsoft.com/ja-jp/azure/databricks/data-governance/unity-catalog/get-started#enablement

> Databricks は、2023 年 11 月 9 日、アカウント全体で順次ロールアウトする Unity Catalog の新しいワークスペースの自動有効化を開始しました。

# Unity Catalogの有効化

マニュアルはこちらにありますが、字が多くて正直取っ付きにくいです。なので、可能な限りスクリーンショットで説明していきます。

https://learn.microsoft.com/ja-jp/azure/databricks/data-governance/unity-catalog/create-metastore

全体的な流れは以下の通りです。

1. Azure Databricksワークスペースの作成
1. Unity Catalog用ストレージアカウント、コンテナーの作成
1. Unity Catalog用マネージドIDの作成
1. DatabricksアカウントコンソールでのUnity Catalogメタストアの作成
1. メタストアをAzure Databricksワークスペースにアタッチ
1. 動作確認

:::note warn
**重要！**
Azure DatabricksワークスペースとUnity Catalogメタストアは同じリージョンである必要があります。また、ストレージアカウントもメタストアと同じリージョンにすることが推奨となります。
:::

# Azure Databricksワークスペースの作成

Azure PortalでDatabricksを検索して、数クリックで作成できます。今回はJapan Westでワークスペースを作成しました。

https://learn.microsoft.com/ja-jp/azure/databricks/getting-started/

![Screenshot 2023-12-22 at 10.15.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/143062f6-abc2-6126-e7de-793f6abc8318.png)

# Unity Catalog用ストレージアカウント、コンテナーの作成

**ストレージアカウントとは？**

> AWSにおけるS3バケットのようなもの。

**コンテナーとは？**

> バケットに作るディレクトリ。

## ストレージアカウントの作成

Azure Portalから**ストレージアカウント**にアクセスします。**+ 作成** をクリックします。
![Screenshot 2023-12-22 at 10.15.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/a75aaedd-fe5b-a0d4-8cc1-8ecd79afeb3c.png)

リソースグループを選択し、ストレージアカウント名を入力します。地域はワークスペースと同じにしましょう。パフォーマンスは性能要件とコスト見合いで選択します。ここでは**Standard**にします。
![Screenshot 2023-12-22 at 10.24.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/89bcc9d9-ce4e-dab0-da73-a6ccf319dd0b.png)

**階層型名前空間**の階層型名前空間を有効にするにチェックをつけます。
![Screenshot 2023-12-22 at 11.00.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/194d2e18-f8e7-653c-8f98-993aff610106.png)

他はデフォルトのままにします。
![Screenshot 2023-12-22 at 10.28.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/7f1f3324-5b22-ba2e-3590-138f0053de91.png)
![Screenshot 2023-12-22 at 10.28.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c7f33cbf-b839-7e84-4654-d0e92c93b92d.png)
![Screenshot 2023-12-22 at 10.29.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/872de93c-d370-649b-aa18-d74aad8e92bd.png)
![Screenshot 2023-12-22 at 10.29.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f7e9dce5-4fcf-eb4f-88e1-de5cd4e206c2.png)

設定を確認してストレージアカウントを作成します。
![Screenshot 2023-12-22 at 11.00.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/5f353e1f-2323-7594-6a4f-64700c5924b3.png)

![Screenshot 2023-12-22 at 10.29.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/254023da-f9f9-7884-033e-8d47def3c91f.png)

## コンテナーの作成

作成したストレージアカウントにアクセスします。**コンテナー**をクリックして **+コンテナー** をクリックします。名前をつけて**作成**をクリックします。
![Screenshot 2023-12-22 at 10.31.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b51ad022-aaad-6dc8-5a5b-5df5f32a82f7.png)
![Screenshot 2023-12-22 at 10.31.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/069b06e1-7c37-6b31-678c-f848508c5a37.png)

作成したストレージアカウント、コンテナ、パスを`<コンテナ名>@<ストレージアカウント名>.dfs.core.windows.net/<パス>`の形式でメモしておきます。

# Unity Catalog用マネージドIDの作成

**マネージドIDとは？**

> サービスプリンシパル(人に紐づかないID)で、Unity Catalogがユーザーに代わってストレージアカウントにアクセスするために使用する。

https://learn.microsoft.com/ja-jp/azure/databricks/data-governance/unity-catalog/azure-managed-identities#config-managed-id

## マネージドIDの作成

Azure Portalの **+リソースの作成** をクリックします。
![Screenshot 2023-12-22 at 11.11.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/a54de73e-2224-2b64-9c4d-8817efe2b733.png)

Azure Databricksで検索して表示される**Access Connector for Azure Databricks**を選択します。
![Screenshot 2023-12-22 at 11.13.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/112e7be0-3eea-eae2-9d3d-23660c405d46.png)

**作成**をクリックします。
![Screenshot 2023-12-22 at 11.14.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/23bd3155-6406-d2e4-37cb-66a6ae6358f2.png)

名前をつけて、リージョンを選択します。リージョンはストレージアカウント(とDatabricksワークスペース)と同じにします。**確認と作成**をクリックします。
![Screenshot 2023-12-22 at 11.16.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/1fdf6a6a-fafd-fa21-c103-afbac33bdd72.png)

**作成**をクリックします。
![Screenshot 2023-12-22 at 11.17.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/4d1e9ba9-22a9-9bcc-e424-c7fb18f1e75b.png)

**リソースに移動**をクリックします。
![Screenshot 2023-12-22 at 11.17.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/a7368079-9e6a-d5bd-ea50-25f22d610c6b.png)

**リソースID**をコピーしておきます。カーソルを移動するとコピーアイコンが表示されます。
![Screenshot 2023-12-22 at 11.18.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e78ace0b-a04a-b888-d830-11c3e03b0a93.png)

## マネージドIDにストレージアカウントへのアクセスを許可

[ストレージアカウントの作成](#ストレージアカウントの作成)で作成したストレージアカウントにアクセスします。**アクセス制御**をクリックし **+追加** をクリックして**ロールの割り当ての追加**を選択します。
![Screenshot 2023-12-22 at 11.36.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/63434f78-3681-a7d7-a0ee-4cdbc3b2da96.png)

`ストレージ BLOB データ共同作成者`で検索して選択します。**次へ**をクリックします。
![Screenshot 2023-12-22 at 11.39.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e6ce4ce4-691d-2e59-ef1b-d96f5a894ed2.png)

アクセスの割り当て先で**マネージドID**を選択し、**+メンバーを選択**をクリックします。
![Screenshot 2023-12-22 at 11.41.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/237c8343-793d-23e0-d6ff-4187b1ece682.png)

**Azure Databricks 用のアクセス コネクタ**を選択し、[マネージドIDの作成](#マネージドidの作成)で作成したマネージドIDを選択して**選択**をクリックします。
![Screenshot 2023-12-22 at 11.49.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8471393f-479e-7208-76bc-233a1647c57b.png)

**レビューと割り当て**をクリックします。
![Screenshot 2023-12-22 at 11.50.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/bc2b102f-a067-dd72-58f9-0d5ccef157c5.png)

もう一度**レビューと割り当て**をクリックします。
![Screenshot 2023-12-22 at 11.50.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8538eee0-eead-6f5a-5541-1fb9e636dd5e.png)

## マネージドIDにファイルイベントへのアクセス権を付与

マネージドIDにファイルイベントへのアクセスを許可することで、ファイル処理の効率が向上します。

上の手順と同様にマネージドIDに`ストレージ キュー データ共同作成者`を割り当てます。
![Screenshot 2023-12-22 at 11.53.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/01fd6e9c-fc3f-885d-a981-867b0d986349.png)

## ユーザーに代わってAzure Databricksにファイルイベントを構成するアクセス権を付与

**リソースグループとは？**

> 名前の通り、Azureのリソースをグルーピングできる機能。リソースグループを削除すると、そこに属するすべてのリソースが削除される。[参考記事](https://tech-blog.cloud-config.jp/2019-06-06-evening-azure-challenge-002/)。

この手順により、Azure Databricksでファイルイベントを自動的に設定できます。

上の手順と同様にマネージドIDに`ストレージ アカウント共同作成者`を割り当てます。
![Screenshot 2023-12-22 at 11.56.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c5c00dd8-42f3-daad-b9ef-797f3aed43b9.png)

ストレージアカウントが属するリソースグループにアクセスします。
![Screenshot 2023-12-22 at 12.02.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/3cd3319e-db57-cdf3-166c-35d42fe6e28b.png)

**アクセス制御**をクリックし **+追加** をクリックして**ロールの割り当ての追加**を選択します。リソースグループに`EventGrid EventSubscription 共同作成者`を割り当てます。
![Screenshot 2023-12-22 at 12.03.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/ce95c055-a1ba-fc14-cc4c-9ca714100587.png)

マネージドIDを追加します。
![Screenshot 2023-12-22 at 12.03.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/67779a7a-1341-5c12-103d-1ce4e9011cf4.png)
![Screenshot 2023-12-22 at 12.06.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/caa52f06-a948-4311-ab62-198ede5543ec.png)

# DatabricksアカウントコンソールでのUnity Catalogメタストアの作成

Databricksワークスペースにログインして、画面右上に表示される自分のメールアドレスをクリックして、**アカウントを管理**をクリックして、アカウントコンソールにアクセスします。
![Screenshot 2023-12-22 at 12.11.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/fac9c36b-4c07-acff-7817-03e790f80021.png)

**データ**をクリックします。
![Screenshot 2023-12-22 at 12.13.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e4d86cb0-006f-eec6-96df-661614972710.png)

**メタストアを作成する**をクリックします。
![Screenshot 2023-12-22 at 12.17.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/44d0c4b3-3af0-23e3-41ad-4b312c9f9c1d.png)

- メタストアに名前を付け、リージョンはストレージアカウントと同じものを指定します。私の場合は`japanwest`となります。
- ADLS Gen 2パスには`<コンテナ名>@<ストレージアカウント名>.dfs.core.windows.net/<パス>`のフォーマットで指定します。私の場合は、`uc-container@japanwestucstorage.dfs.core.windows.net/`となります。
- アクセスコネクターIDには[マネージドIDの作成](#マネージドidの作成)で作成したマネージドIDのリソースIDを指定します。

**作成**をクリックします。
![Screenshot 2023-12-22 at 12.23.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8937b270-e8d5-8f30-a636-74cceb4de6b9.png)

メタストアが作成されました。
![Screenshot 2023-12-22 at 12.25.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/0683bc49-a092-2525-de7f-3a2929325250.png)

# メタストアをAzure Databricksワークスペースにアタッチ

上の画面ではすでにアタッチするワークスペースが表示されているので、左端のチェックボックスをチェックします。**割り当てる**をクリックします。
![Screenshot 2023-12-22 at 12.26.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/4227e92c-4a84-829c-1b37-1813ca523d53.png)

確認メッセージが表示されるので、**有効化**をクリックします。
![Screenshot 2023-12-22 at 12.28.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e0dfeea1-2042-b4f5-00cb-0d29b9c1dbbf.png)

おめでとうメッセージが出たら成功です。
![Screenshot 2023-12-22 at 12.29.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8bc4a7f5-2848-b442-3310-342ff3f7c5b6.png)

# 動作確認

上でメタストアをアタッチしたワークスペースにアクセスして、左のメニューから**カタログ**にアクセスします。カタログ一覧に`main`が表示されていることを確認します。これがUnity Catalogのデフォルトのカタログです。
![Screenshot 2023-12-22 at 12.31.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/271aaf4b-06ff-cb1f-2383-ed32dbcf3e8b.png)

左のメニューから**クラスター**を選択し、**Personal Computeで作成**をクリックします。
![Screenshot 2023-12-22 at 12.34.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c7fc56f2-3891-1791-5809-b42863f16665.png)

**コンピューティングを作成**をクリックします。これで、Unity Catalog対応のクラスターが作成されます。
![Screenshot 2023-12-22 at 12.35.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/df0b31ed-5ed3-09b6-6a92-13487b5fe9e9.png)

SQLノートブックを作成し、上記クラスターにアタッチして以下のコマンドを実行します。

```sql
SHOW CATALOGS;
```

カタログ一覧が表示されます。
![Screenshot 2023-12-22 at 12.39.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/706814c8-d92e-d51c-daa1-f44b22e72efa.png)

以下のコマンドを実行してスキーマ(データベース)を作成します。

```sql
USE CATALOG main;
CREATE SCHEMA uc_test;
```

カタログエクスプローラでスキーマを確認できます。
![Screenshot 2023-12-22 at 12.41.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/d70e110d-00b8-9de9-3835-71fd04cae771.png)

以上で終了です。お疲れ様でした！

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

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


### Databricks無料トライアル

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