Microsoft Purview で Azure Databricks をスキャンしてみる

## はじめに

Purviewから簡単にDatabricksのスキャンができるPreviewが来ていたので試してみました。

[Microsoft Purview で Azure Databricks に接続して管理する (プレビュー)](https://learn.microsoft.com/ja-jp/azure/purview/register-scan-azure-databricks)

### 注意事項

2023/01/19 時点の確認結果です。

また、一部リソース名などからエンドポイントを推定できる箇所があるかもしれませんが、デモ用の一次的な環境で作成してます。

## 取得対象

![2023-01-19-15-03-33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/b612ff83-a788-7160-ba05-704cefe25875.png)


現時点では、スコープスキャンができないのですべて取得される想定ですが、
hive_metastoreの対象は以下からdemo_devを確認したいと思います。

![2023-01-19-10-58-42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/cbabd2e7-d4d8-d9cd-4d4b-96c185c20f68.png)


salesはマネージドテーブルです。

![2023-01-19-10-58-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/7952389e-a832-9c1f-ccd0-773c82f77276.png)


movies はアンマネージドテーブルとしてtype=EXTERNALとなっています。

![2023-01-19-10-57-52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/e712fd3c-e216-eaa2-e06c-f4a096d29294.png)

マネージドテーブルとアンマネージドテーブルの違いは[Databricksにおけるデータベースおよびテーブル](https://qiita.com/taka_yayoi/items/e7f6982dfbee7fc84894#%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%83%89%E3%82%A2%E3%83%B3%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%83%89%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB) などご参照ください。


## 準備

### Purview用のセルフホステッド統合ランタイムの構成

AzureVMを利用しています。ちなみにDSVMイメージを使うと色々楽でした。

1.JDK 11のインストール

数秒で完了します

![2023-01-19-10-09-39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/2c60a058-ff03-7ca2-c8b7-73d09f909d9c.png)


2.Visual Studio 2012 Update 4 の Visual C++ 再頒布可能パッケージのインストール

数秒で完了します

![2023-01-19-10-14-45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/8519420b-f0d5-b69f-67c6-13fab0a79ea7.png)


3.セルフホステッド統合ランタイムのインストールと構成

[セルフホステッド統合ランタイムを作成して共有する](https://learn.microsoft.com/ja-jp/azure/purview/manage-integration-runtimes)に基づいてインストールから構成を進めました。

Purview上でランタイムを作成

![2023-01-19-10-17-26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/688a513a-33a0-303c-877f-9bd2d6878b68.png)


![2023-01-19-10-17-56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/55b20215-32e7-4290-78f3-90e9afcf9b58.png)


キーを取得

![2023-01-19-10-18-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/71f35910-6b6b-88fd-9135-bb516c28291c.png)


VM側でキーを設定して接続

![2023-01-19-10-25-41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/3df30eea-b533-d379-699f-d2d054753b9e.png)


Purview側から見てセルフホステッド統合ランタイムがオンラインになっています

![2023-01-19-10-27-30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/ec6ef878-55a8-9668-30a3-d526e251d439.png)


### 個人用アクセストークンとクラスター作成

DatabricksへのPurviewからの認証には個人用アクセストークンを利用するので、これを発行します。

1. トークン発行

![2023-01-19-10-22-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/03eecbf5-d17f-831e-43cb-83b077f09ab7.png)

![2023-01-19-10-22-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/98d2894a-9592-0bb2-9a22-a52abc0ed7c6.png)

![2023-01-19-10-22-42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/ef412089-69c0-a4cb-20d3-f4daa55bab8a.png)

発行したトークンをKey Vaultに登録しておきます。

![2023-01-19-10-23-37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/ea675b81-4cf2-fd67-7ce1-41676b20828c.png)


2. クラスター作成

手順など割愛しますが、低スペックのシングルノードクラスターを作成しました。

![2023-01-19-11-13-51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/edf6d036-0511-efc1-bcfd-51d25ab2cee6.png)


### Purview用のKey Vaultの構成

トークンの保管されたKey Vaultに対してPurviewを接続しておく必要があります。

keyvault接続

![2023-01-19-10-24-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/6b8655f0-19df-77eb-03db-a30b75efcdee.png)

![2023-01-19-10-24-42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/95a9cd43-96f5-4fa0-4408-9cc89eda4712.png)


## 手順 

では実際にDatabricksをスキャンしてみます。手順は冒頭のリンクに従っています。

### Databricks ソースの登録

まずは、ソース登録です。

1.ソース登録画面からDatabricksを選択します。

![2023-01-19-10-29-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/fd1439e0-6ce2-61c7-c567-2a8fff99f83a.png)


2.対象のワークスペースを選択すれば完了です。

![2023-01-19-10-29-57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/5f9e034c-2800-aae4-baf3-2bc159f13732.png)


### スキャンの実行 マウントポイントなし

最初の実行では、省略可能なマウントポイントはなしで実施してみます。

スキャン作成画面から資格情報を作成して、KeyVaultに保管した個人用アクセストークンを使えるようにしておきます。

![2023-01-19-10-30-53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/a49ecd04-1653-404c-dc56-8368be9de38b.png)


クラスターIDをクラスター情報から取得します。

![2023-01-19-10-32-07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/7a52972a-0f9d-ce9f-c7b4-40daa109a49b.png)


スキャン設定はこのようになりました。この設定で実行してみます。

![2023-01-19-10-31-55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/dc35b9c7-d772-3320-f27a-93edcb79688f.png)


### 結果確認 マウントポイントなし

マウントポイントなしでの実行確認です。およそ2分超で完了しました

databricksワークスペースと関連するhive server , hive DBが登録されています。

![2023-01-19-10-51-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/efa7902e-1743-8873-111b-78e0ec7915bf.png)

Databricksのアセットはこのようになります

![2023-01-19-10-51-59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/6966a545-c455-e3cb-b335-b31f9c1dfb22.png)

![2023-01-19-10-52-07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/ee0cdf2f-7a69-d546-d84a-f50c10e68755.png)


関連はなし

![2023-01-19-10-52-18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/de8bfd15-a3a4-9a1e-49ce-e5dc95ed1bb2.png)


hive serverに遷移します。


![2023-01-19-10-52-48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/450ca83b-ff8d-f576-5e09-4dd883f5efef.png)

![2023-01-19-10-52-57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/9e70d445-b929-80dc-eedd-9cd71d021d91.png)


Hive DBが関連として登場し、スキーマが表示されています。

![2023-01-19-10-53-07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/7c170347-9b47-d583-2116-eaad03df363c.png)


取得対象としたdemo_devのhive dbに移動します

![2023-01-19-10-54-15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/aaaed0bf-8a06-8e2e-390d-f8785f9d52af.png)

![2023-01-19-10-54-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/4ff6f7d8-926a-a918-4e16-ff4a04cfe249.png)

![2023-01-19-10-54-30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/032bf2e4-8d3a-9ec1-4d5c-3fbf9d5082ad.png)


外部テーブルであるmovies

![2023-01-19-10-54-48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/23683ff7-f345-9478-51d7-7a748c767411.png)

![2023-01-19-10-55-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/f40f504f-5333-2a2b-a37b-f6d80f0891a0.png)

![2023-01-19-10-55-09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/ea52b0a5-9a5c-63c6-f3eb-acb867946d6c.png)

![2023-01-19-10-55-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/099b67d9-00e2-7da5-b9bd-2759b19e8f00.png)

![2023-01-19-10-55-31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/3cf2a210-21b8-a475-e164-63c3ecdfd5f3.png)


マネージドテーブルであるsales

![2023-01-19-10-55-51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/616f0521-a7b4-3768-4fe1-35ff4745f445.png)

![2023-01-19-10-56-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/b83f7bd6-e825-4a17-cc0b-329b893ef738.png)

![2023-01-19-10-56-07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/6ee3980c-edf4-5d34-cf42-7eb6a29cba5a.png)

![2023-01-19-10-56-18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/be5fc506-25d0-f400-7222-589d202cb46a.png)


現時点ではアンマネージドテーブルとは特に差異がありませんね。


### スキャンの実行 マウントポイントあり

次にマウントポイントを指定してみます。

マウント情報は以下のように確認し、moviesテーブルが保管されている/mnt/dlsanalyticsdemo/datalakeを使ってみます。

![2023-01-19-11-01-26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/ff966105-92e5-21aa-e6bb-3dd8c27352df.png)


スキャン設定は以下の通り

![2023-01-19-11-02-42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/6c6c35e1-974b-64b2-1e82-d72f20b1d224.png)




### 結果確認 マウントポイントあり

アンマネージドテーブルであるmoviesには系列が追加されました。マネージドテーブルには特に変更なしです。

![2023-01-19-14-01-21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/4a9b7ee6-38ee-2527-bc18-46d1de692fa3.png)



### スキャンの実行 Unity Catalog有効の場合

対象のワークスペースをunity catalogを適用してdata explorerでunity catalogのテーブルも表示されるようにしてみます。

![2023-01-19-15-02-18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/dddabf1e-eb0b-3aa5-9a6e-cc97042cd269.png)


![2023-01-19-15-02-40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/510106a4-2ece-0da2-928e-5311c31352c4.png)

この状態でスキャンを実行するとどうなるか。


### 結果確認 Unity Catalog有効の場合

取り込みアセット数が変わっていないので、やはりUnity Catalog配下のデータは取得対象外ですね

![2023-01-19-15-08-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/5d0ad02d-72f0-3695-d706-b59f65e6d045.png)


実際に、Hiveテーブルなどのカタログ追加は発生していませんでした。

たとえばこのテーブルは

![2023-01-19-15-09-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/f2bf863b-cf24-857a-9be1-56964fc809fc.png)


カタログで検索しても表示されません。

![2023-01-19-15-09-55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/914ea103-f1e7-07ae-6967-adbc6b6b4d98.png)

## 所見

アンマネージドテーブルのストレージとの関係がとれるのは結構うれしいですね。これであればDataFactoryとの連携が取れるのではと思います（リソースセットではなくパスの種類なので多少限定されると思いますが）

一方で、マウントする形式はUnity Catalog配下では推奨されなくなるものという認識なので、Unity Catalogとの連携が早く来るといいですね


## その他気になった点の確認結果

### クラスタの自動起動

クラスタ休止中にスキャンが走るとどうなるか確認しました。

きちんと自動起動しています。この分スキャン時間は延びるかとは思いますが、セルフホステッド統合ランタイムなのでコストも大丈夫そう

![2023-01-19-14-54-16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/4ca2e5b1-dc80-05c6-fa3b-594abc45809b.png)

### マネージドテーブルのリネージ

だめもとでマウントポイントにDatabricksマネージドストレージ上のrootを入れて動かしてみましたが、リネージは取れませんでした。
これについては別に良いかなという感じ（マネージドストレージへのリネージとってもしょうがないので）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/94f4ff20-20f2-69ef-ad76-0cb85b25e29f.png)