[CDGC] JDBC のスキャン(JDBC scanner で Azure Cosmos DB からメタデータを取得する)

# はじめに
[インフォマティカ](https://www.informatica.com/jp/)が提供する [CDGC](https://www.informatica.com/jp/products/data-governance/cloud-data-governance-and-catalog.html)(データガバナンス＆カタログ) では Data Platform に関する多くのソースシステムに対してスキャナーが用意されています。もし、実際にどんなものがあるのだろう、と思われた方には [[CDGC] ソース・システムのリストおよび対応機能 - Catalog Source Configuration](https://qiita.com/masatoshimada-max/items/a0c29348284ec64cc574) の記事から一覧を確認頂けますので、参照頂ければ幸いです。


そして、UI やこちらを確認を頂きつつ、スキャンしてみたい対象が CDGC 側に対象製品が用意されていない、といったケースもあると思います。そのようなケースであっても、JDBC URL 形式でのアクセスが可能な JDBC Driver が提供されているならば、この JDBC タイプでのスキャンを実施する事でメタデータの取得が可能です。

この記事では CDGC にデフォルトのカタログソースではない Azure Cosmos DB のコア(SQL) API から JDBC タイプのリソースとしてスキャンを実施し、メタデータを取得してみたいと思います。
※2023/11月時点の情報を元にしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/d82c6b24-accb-ff8f-f4da-5bc69e3ca832.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/d4f9c89c-6d96-00fa-b0f2-3561c41336eb.png)


<!-- 各チャプター -->
 
# 事前準備
JDBC でアクセスする先のソースシステムに応じた JDBC Driver を Secure Agent 配下に用意する必要があります。以下の各手順を順番に実施し、正常に接続可能かを確認してください。

## 1.使用する JDBC ドライバを取得する
今回、接続及びスキャンに使用する JDBC Driver に関しては [CData 社様の JDBC Driver](https://www.cdata.com/jp/drivers/cosmosdb/download/jdbc/) を使用させて頂きました。

## 2.取得した JDBC ドライバを Secure Agent 配下に配置する
取得したドライバを Secure Agent が使用できるように JDBC ドライバを配置する必要があります。なお、初回構成時には配置先のフォルダがない為、以下の手順でフォルダを作成し、配置してください。

~~~
cd <Secure Agent インストール先>/infaagent/ext/connectors/thirdparty
mkdir -p informatica.jdbc_v2/common
~~~

作成した common ディレクトリ内に今回使用する JDBC Driver を配置します。アップロードした JDBC Driver を利用するには Secure Agent を再起動する必要があります。

~~~
cd <Secure Agent インストール先>/infaagent/apps/agentcore
./infaagent.sh shutdown
./infaagent.sh startup
~~~

## 3.JDBC_V2 接続を作成する
CDGC で利用する JDBC_V2 接続を作成します。接続文字列等の設定は JDBC Driver ベンダーに依存しますので、各ベンダーのサイトを確認下さい。

<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/03f3e512-52ba-7189-74a5-00eed498dd70.png">

:::note info
今回のテストでは [CData 社様の JDBC Driver](https://www.cdata.com/jp/drivers/cosmosdb/download/jdbc/) を使用させて頂きました。
参考までに詳細を記載しておきますが、ドライバ名は cdata.jdbc.cosmosdb.CosmosDBDriverで、JDBC 接続文字列は jdbc:cosmosdb:AccountEndpoint=https://{アカウント名}.documents.azure.com:443;AccountKey={PRIMARY KEY} のような形式になります。
:::



# スキャン設定
JDBC タイプのスキャナの設定方法については [ナレッジベース(KB) : HOW TO: Metadata Command Center で JDBC ドライバを使用してメタデータを抽出する方法](https://knowledge.informatica.com/s/article/HOW-TO-Use-the-JDBC-drivers-to-extract-metadata-in-Metadata-Command-Center?language=ja) もしくは、英語になりますが、[公式のドキュメント](https://docs.informatica.com/data-governance-and-quality-cloud/metadata-command-center/current-version/catalog-source-configuration/jdbc.html) もありますので、もし詳細を確認されたい場合にはこちらも参照してみてください。では、早速スキャンの設定を実施してみましょう。

## 1.メニューから "メタデータコマンドセンター" を起動
メニューから "メタデータコマンドセンター" を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/6a86ebd0-df29-e8f1-7c8f-88cfe590d312.png)

## 2.メタデータコマンドセンターから "新規" を選択
新しくカタログソースを設定する為、"新規"をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/68591ed1-5efc-cf90-76b5-5a6ca93dfe02.png)

## 3.カタログソースから "JDBC" を選択
カタログソースにリストされる一覧から "JDBC" を選択します。

<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/b1ac277d-3225-14ad-c9b7-3c06e9170ef3.png">

## 4.Azure Cosmos DB への JDBC 接続を選択
Azure Cosmos DB への JDBC_V2 接続がリストされているはずですので、選択して "次へ" をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/a5902a2b-db5f-fa6f-8ac2-516b0a4226d5.png)


## 5."メタデータの抽出" を設定
"メタデータの抽出" タブでランタイム環境から利用する Secure Agent を選択します。必要に応じてフィルタで絞り込みを実施し、"保存" をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/26db4851-1eef-f862-2025-29c6adbfaa04.png)

## 6."実行" でスキャンを開始
他にも設定項目はありますが、今回の記事のフォーカスポイントは設定し終わったので、"実行" をクリックし、スキャンを実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/fd1405c6-01f8-466f-8425-3645cd29125d.png)


## 7.実行スコープの設定
初回実行時、実行のスコープの画面で、"メタデータの抽出" はグレーアウトしています。2回目以降では下記の様に選択できる状態になっているかと思いますので、"削除" を指定しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/68abbd7d-d6a3-cb8d-8fb1-3c3223f1f487.png)

:::note warn
このチェック項目がわかりにくい為、簡単に補足しておきます。この設定は既にカタログに取り込まれたアセットがソースシステム側で削除された場合にどう処理されるかを決定します。それぞれの設定に対して以下の様な動作となります。

| オプション |動作|
|:-:|:--|
|保持|カタログソースからオブジェクトが削除されたり、フィルタ条件の変更でオブジェクトがヒットしなくなった場合でも、既にカタログ内に存在する変更前のアセットはカタログに保持されます。|
|削除|カタログソースからオブジェクトが削除された場合及びフィルタ条件の変更でオブジェクトがヒットしない場合、メタデータがカタログから削除されます。|

つまり、過去に一度でもアセットとして存在していたら残したい、という場合には"保持"を設定する必要がありますが、現在の最新のデータベース側の最新状態、フィルタ条件に応じたアセットを抽出、検索したい場合、"削除"を設定します。
:::

## 8.ジョブ監視画面で結果を確認
ジョブ監視画面に自動で遷移するので、しばらく待ってステータスが完了した事を確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/905deb15-5db7-b08f-b2f7-8113430d8b51.png)


# 結果の確認
Azure Cosmos DB 側には以下の様な JSON ドキュメントが入っていました。

~~~
{
    "empno": 7900,
    "ename": "JAMES",
    "job": "CLERK",
    "mgr": 7698,
    "hiredate": "1981-03-12",
    "sal": 950,
    "deptno": 30,
    "id": "6c3700ae-42c7-416e-a8a3-e53dadeb46e6",
    "_rid": "7ZFPAKS1RQ0BAAAAAAAAAA==",
    "_self": "dbs/7ZFPAA==/colls/7ZFPAKS1RQ0=/docs/7ZFPAKS1RQ0BAAAAAAAAAA==/",
    "_etag": "\"e100f347-0000-2300-0000-654d9c920000\"",
    "_attachments": "attachments/",
    "_ts": 1699585170
}
~~~

CDGC 側より、上記の様な JSON ドキュメントの要素が抽出されている事が確認できますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520029/8a30811c-a7c1-ef84-0d7f-e5012c66e2c4.png)



# 参考文献
- [マニュアル : Catalog Source Configuration - JDBC (ログインが必要)](https://docs.informatica.com/data-governance-and-quality-cloud/metadata-command-center/current-version/catalog-source-configuration/jdbc.html)
- [ナレッジベース(KB) : HOW TO: Metadata Command Center で JDBC ドライバを使用してメタデータを抽出する方法](https://knowledge.informatica.com/s/article/HOW-TO-Use-the-JDBC-drivers-to-extract-metadata-in-Metadata-Command-Center?language=ja)

# おことわり（Disclaimer)
投稿する記事は私個人の見解であり所属する会社の公式な見解ではありません。
All articles I post onto Qiita are based on just my personal understanding or opinion. That means the articles are not expressed as an official opinion of the company I am belonging to or have belonged to.