Microsoft Purview のメタモデルを利用してビジネスプロセスとデータを関連付けよう

# はじめに
私の [Microsoft Azure Advent Calendar](https://qiita.com/advent-calendar/2022/microsoft-azure-tech) ネタといえば Microsoft Purview を遊び倒す企画ってのがあります。去年は Microsoft Purview （Azure Purview から改名しました）を [PyApacheAtlas](https://github.com/wjohnson/pyapacheatlas) で遊ぶ企画がかなりのアクセス数を記録しました😎

https://qiita.com/nohanaga/items/b6f6ba045c1f78a15073

https://qiita.com/nohanaga/items/e053ed79a5aff398b2d5

[Microsoft Purview](https://azure.microsoft.com/products/purview/) は、オンプレミス、マルチクラウド、サービスとしてのソフトウェア (SaaS) のデータの管理とガバナンスに役立つ統合データ ガバナンス ソリューションです。自動化されたデータの検出、機密データの分類、エンドツーエンドのデータ系列によって、データ環境の総合的な最新のマップを簡単に作成できます。

今年は、Microsoft Purview にプレビュー機能として搭載された**メタモデル**機能についていろいろ遊んでみようと思います。

# メタモデルとは
メタモデルは、データ カタログに豊富な**ビジネス コンテキスト**を追加するのに役立つデータ マップの新機能です。利用者がデータ アセットの利用法について知りたいとき、これまではデータの所有者や専門家の[連絡先](https://qiita.com/nohanaga/items/b6f6ba045c1f78a15073#%E9%80%A3%E7%B5%A1%E5%85%88%E3%81%AE%E8%BF%BD%E5%8A%A0)程度の情報しか得られませんでした。今回追加されたメタモデル機能によって、以下の[定義済みの資産の種類](https://learn.microsoft.com/azure/purview/how-to-metamodel#predefined-asset-types)を**ビジネス アセット**としてデータと関連付けることができるようになりました。

|資産の種類|説明|
|---|---|
|アプリケーション サービス|適切に定義されたソフトウェア コンポーネント。特に、新しい顧客のオンボード、注文の取得、請求書の送信など、特定のビジネス機能を実装するコンポーネント。 |
|ビジネス プロセス|共同でビジネス目標を実現する組織または技術環境で調整して実行される一連のアクティビティ。|
|データ ドメイン|マスター データ管理のために管理または明示的に管理されるデータのカテゴリ。|
|部署|その組織のコンテキスト内でのみ完全な認識を持つ組織サブユニット。 部門は、それ自体が法人とは見なされません。|
|業種|1 つの製品または製品ファミリに重点を置いた組織の下位区分。|
|組織|コミュニティまたはその他の社会的、商業的または政治的構造にまとめて組織された人々のコレクション。 グループには、それに属する人のセットを超えて、ユニットとして機能できる共通の目的または理由があります。 組織は多くの場合、階層構造に分解できます。|
|製品|提供されている製品またはサービス。|
|プロジェクト|新しい機能の構築や既存の機能の改善など、プロジェクトの目標を正常に達成するために適切に使用されるように、リソースと関連コストの使用を制御するために使用される特定のアクティビティ。|
|システム|ハードウェアとソフトウェアを含む IT システム。|

あぁ・・・こうしたビジネスプロセスのモデリングを事前に作成しておけば、多くのプロジェクトで救われる人も出てくるのではないでしょうか。どんな部署がどんなビジネスプロセスで仕事をしていて、どんなシステムを利用していて、どんなデータを使っているのか。これがグラフィカルに分かる。

# 1. 資産の種類（アセットタイプ）の定義
では早速 Microsoft Purview のデータ マップから「資産の種類（プレビュー）」を選択します。
![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/c30ac615-07c9-b0b9-e85a-e57e39616fa1.png)
上のキャンバスでは事前定義されたアセットタイプのリレーションシップがデフォルトで用意されています。ここでまずメタモデルを構築し、その後にデータ カタログ内で実際の**ビジネス アセット**を作成する流れとなります。

定義済みアセットタイプの一つである**ビジネス プロセス**のリレーションシップについてよく見てみましょう。
![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/9c21ebfb-63ed-6e1f-734d-73ab0c47cc9a.png)
**ビジネス プロセス**は**部署**の管理下（Manages）にあり、**アプリケーション サービス**によって実装（Implements）されています。この矢印→は UML のクラス図でいうところの [Association](https://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%A9%E3%82%B9%E5%9B%B3#%E3%82%AF%E3%83%A9%E3%82%B9%E9%96%93%E3%81%AE%E9%96%A2%E4%BF%82) を表します。リレーションシップの下部にはカーディナリティが表示されています。このようにして、キャンバス上で定義済みのアセットタイプおよび独自のカスタムタイプを**自由に**定義することができます。

## 1.1. ビジネスプロセスにシステムを連結する
デフォルトでは**システム**は**ビジネスプロセス**と連結されていません。「＋新しい関係」をクリックして、下図のようにリレーションシップを作成します。**関係**では、両者が所有なのか実装されているのか、管理されているかなどの状態を表します。
![004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/d20f1613-2b3a-eaa0-8c26-003a0c69b55c.png)
リレーションシップ カテゴリは、[UML クラス図](https://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%A9%E3%82%B9%E5%9B%B3#%E3%82%AF%E3%83%A9%E3%82%B9%E9%96%93%E3%81%AE%E9%96%A2%E4%BF%82)におけるクラス間の関係を使って表現できます。基数と訳されているのは、UML における[多重度](https://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%A9%E3%82%B9%E5%9B%B3#%E5%A4%9A%E9%87%8D%E5%BA%A6)のようなものです。
- 協会（Association）→協会というか、関連？
- 集計（Aggregation）
- 構成（Composition）

## 1.2. システムにデータセットを連結する
デフォルトでは**データべース**のリレーションシップしか用意されていません。ここにもう一つ**データセット** タイプを連結しましょう。左ペインのコンポーネントから「データセット」をドラッグ&ドロップして、同様にリレーションシップを定義します。
![005_v2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/0b0692c3-90bf-61c7-ae7b-68106a18c382.png)
はい、こんな感じでリレーションシップが完成しました。

# 2. ビジネス アセットの作成
ガワ（メタモデル）のモデリングが完成したので、次は実際に**ビジネス アセット**を作成します。
![006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/b4efdab8-af68-2d7f-e3b7-44fcf3833363.png)
今度はデータ カタログの「ビジネス資産（プレビュー）」に移動して、「＋新しい資産」ボタンをクリックします。メタモデルの構造に従って、以下に示すビジネス アセット（エンティティ）を作成します。
```text
[組織]---[部署]---[ビジネス プロセス]---[システム]---[データセット]
```
シナリオとしては、Contoso Corp. にマーケティング部があって、そこではマーケティングデータを分析するビジネスプロセスが存在します。このマーケティングデータ分析には、ソーシャルメディア分析システムが含まれており、このシステムは Cosmos DB に保存された Twitter データコレクションを利用している想定とします。

## 2.1. 例：部署（マーケティング部）の作成
アセットの種類を「**部署**」にして、名前に「Marketing Div.」と入力します。
![008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/dc31503e-30cc-ea0e-8597-bb2291be48e3.png)
次に「関連」タブを表示すると、メタモデルで定義したリレーションシップ情報が自動的に読み込まれて、紐づけるアセットを選択できるリンクが追加されます。
![007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/81c3cd55-ff58-b734-965c-3b014527379e.png)
例えば、すでに**ビジネス プロセス**タイプのアセット「Analyze Marketing Data」をすでに作成しておいて、このようにチェックを入れることで紐づけることができるようになります。

「連絡先」タブではエキスパートと所有者のほかにも「スチュワード」ロールを追加できるようになっています。
![009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/bdeba7e6-1965-d8a3-6b02-102731b10575.png)
アセットの保存後「Marketing Div.」を選択し、「関連」タブを開くとこのようにリレーションシップが形成されていることが確認できます。関連やカーディナリティはメタモデルの定義通りになっていますね。
![010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/8cd7a08d-d389-b59c-33a9-e623463d4265.png)

## 2.2. 例：システム（Social Media Analytics System）
前の例と同様に、ビジネスプロセスが管理するソーシャルメディア分析システムのアセットを作成します。システム タイプの「関連」タブでは、メタモデルで定義したリレーションシップエントリーが表示されていますので、「Has データセット」に事前にスキャンしておいた Cosmos DB の「Twitter」コレクションを選択して追加します。
![013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/7e1e5103-6fd9-7cbb-5426-7b510184c921.png)
はい、このようなリレーションシップが完成しました。
![011_v2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/a25ed2fa-55cf-c2fe-9c72-72dd664f2962.png)

# 3. アセットの検索
ビジネス アセットがデータ アセットと紐づいたので、この状態でデータ アセットを検索してみましょう。「Twitter」と検索し、Azure Cosmos DB SQL API コレクションのアセットを選択します。
![014.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/75744bca-6484-b1ba-cfac-c9b3f9f08023.png)
「Twitter」コレクションの「プロパティ」タブの「関連するアセット」セクションに注目してください。「IsPartOf System」に「Social Media Analytics System」が紐づいていますね！
![015.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/26bb6011-6aea-d9b0-0920-77f571aa5c3d.png)
これでデータ アセットを発見したユーザーは紐づいているビジネス アセットを辿ることができるというわけです。COOL😎

# 4. Apache Atlas Open API による開発
[PyApacheAtlas](https://github.com/wjohnson/pyapacheatlas) を使ったビジネス アセット開発は[こちら](https://qiita.com/nohanaga/items/b6f6ba045c1f78a15073)のデータ アセットの開発手法と同様です。`get_all_typedefs()` によって取得できるビジネス アセットのタイプ（型）は、以下が定義されています。ちなみに 1 年前は 2MB だった定義ファイルが、今は 3.5MB まで増えていました🧐 めっちゃ追加されとる…

```csv
Purview_DataDomain
Purview_Organization
Purview_Department
Purview_Project
Purview_Product
Purview_LineOfBusiness
Purview_BusinessProcess
Purview_System
Purview_ApplicationService
```

こちらを `get_typedef()` の `name` 引数にセットすれば定義が取得できます。ビジネス アセットのエンティティは `get_entity()` を使用すれば取得できます。リレーションシップについては例えば**システム**タイプであれば `relationshipAttributes` の `isManagedBy_BusinessProcess` エントリーが追加されていることが確認できます。

# さいごに
はい、こんな感じで Microsoft Purview のメタモデルを楽しんでいただければと思います。Microsoft Purview にはこの他にも色々な機能があるので試してみるのも面白いのではないでしょうか。そして Microsoft Purview の開発を通して、新たなデータガバナンスエコシステムが活性化されることを楽しみにしています。