【OpenMetadata】Snowflakeのテクニカルメタデータをデータカタログに取得する

## ごあいさつ

こんにちは。日鉄ソリューションズ株式会社のhayashitaniです。
私が所属している組織では製造業のお客様向けに、データ基盤構築、データガバナンスコンサルなどを支援させていただいております。

今回は、OSSのデータカタログツール「OpenMetadata」を使って、データカタログでどのようなことができるのか、実機操作をしながら見ていきたいと思います。

　　　　　　　　　　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959879/1d75a0da-7dbe-224a-b783-b131b75a31eb.png)



本記事を皮切りに、以下のような色々な機能を見ていく予定です。
| no | 概要 | 
| ------- | ------- | 
| # | データカタログ概要 |
| 1 | Snowflakeのテクニカルメタデータをデータカタログに取得する　★本記事 |
| # | ビジネスメタデータをデータカタログに登録する |
| # | データカタログの検索機能を触ってみる |
| # | リネージをデータカタログに登録する |
| # | Snowflakeの利用情報をデータカタログに登録する |
| # | 用語をデータカタログに登録する |
| # | サンプルデータをデータカタログに登録する |
| # | プロファイリング情報をデータカタログに登録する |
| # | データカタログで品質テストを行う |
| # | データカタログで品質テストを行う |

:::note warn
本投稿の内容は私個人の意見であり、組織の見解を代表するものではありません。
:::


メタデータの概要については以下に投稿を行っています。
* [【入門】メタデータとは？テーブル定義書の内容を３つのメタデータに分類してみる](https://qiita.com/hayashi----00/items/82015d767b88f75151d9)



## 前提

* OpenMetadataがインストール済み（本記事では、１．６．１バージョンを利用）
* Snowflakeアカウントを利用可能
* ブラウザを利用可能（本記事では、Chromeを利用）

## 準備

* OpenMetadataからSnowflakeへの接続に利用する、ユーザー、ロール、仮想ウェアハウスを作成
* 作成したユーザーに、作成したロールを付与
* 作成したロールに、作成した仮想ウェアハウスの権限を付与
* Snowflakeに以下の画像の通り、DB、スキーマ、テーブル、ビューを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959879/a77d290f-61bc-7832-45ec-d1e2f965dc98.png)


* 作成したDB、スキーマ、テーブル、ビューに権限を付与
※ 2024年12月時点で必要な権限は、以下の通りでした。
　・DB、スキーマ：USAGE
　・テーブル、ビュー：SELECT
* ブラウザからOpenMetadataに管理者ユーザーでログイン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959879/4e133a20-d878-ab61-8dd6-5b05ae8e5086.png)
## 接続設定


 「設定」＞「サービス」＞「データベース」>「新しいサービスを追加」をクリック

:::note info
サービスは、OpenMetadata上にメタデータを登録するためのオブジェクトです。
Snowflakeで言うと、DBの１つ上の階層に該当します。 
サービスがあると、同じDBでも複数のオブジェクトに分けて登録が可能となります。オブジェクトを分けるメリットとしては、権限管理の簡素化が挙げられます。
このような機能は、他のデータカタログ製品でもよく見かける仕様かと思います。
:::

接続対象のツールが表示されるので、Snowflakeを選択します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959879/c6c54937-3caa-5e77-5cd3-486f5610931f.png)

サービス名の定義、接続情報の入力、接続テストが完了したら保存します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959879/e92a870d-9ec8-ec1c-6a05-dca9c4bfa72f.png)

※ 接続テスト結果イメージです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959879/c10eefce-ce04-2f8e-021f-226ac6bff07a.png)

権限によっては、GetTags（タグ取得）、GetQueries（クエリ情報取得）でAttentionになると思いますが、こちらに関しては、別の投稿で見ていく予定なので今回は無視します。

接続設定が完了すると以下のようにサービスのページが作成されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959879/3a4e27d5-5cb5-d443-5983-3f0742c14c6e.png)


## 取込ジョブ作成
サービスオブジェクトのページで、メタデータインジェスチョンを追加をクリックします

:::note info
インジェスチョンは、情報を取得するためのジョブの名称です。
OpenMetadataでは、用途毎にインジェスチョンの種類が分かれています。
:::

取込設定、スケジュール設定を行い、デプロイします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959879/7caea6b8-1933-c768-7329-3b7c26bcdf4a.png)

※ 私は今回デフォルトから以下を変更しました
* 「INFORMATION_SCHEMA」は対象外に指定（取り込みたくないため）
* 「Include Tags」はオフ（今回はタグの取得は対象外のため）
* 「Include_DDL」はオン（テーブル、ビュー定義を取得したいため）
* 「Overrude Metadata」はオン（複数回取得ジョブを実行する可能性があるため）

また、今回は１度ジョブを実行できれば良いので、スケジュール設定は手動実行で指定しました。


## 取込ジョブ実行

サービス画面のインジェスチョンタブを開き、対象のジョブを実行します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959879/c8a61ee0-67eb-712c-aa1b-1aa68781c680.png)

実行が開始すると、実行状況が「QUEUED」になります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959879/27b65765-525c-acb7-5940-0e4348031926.png)

「SUCCESS」になったら完了です！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959879/5b1b442a-4909-db65-7f5a-3d85a4d80969.png)


## 結果

### データベースのページ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959879/14bc1104-ed4b-323c-5cdd-252d7ac8d7a9.png)
データベースの物理名、データベースが保持するスキーマが取得されました

### スキーマのページ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959879/f69afb93-7f49-c6ff-e6d6-6fbb37b63452.png)
スキーマの物理名、スキーマが保持するテーブル、ビューが取得されました

### テーブルのページ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959879/82e42245-c189-bf81-13da-871a575ce2a9.png)
テーブルの物理名、カラムの一覧、カラムの物理名、カラムのデータ型、桁数、制約（プライマリーキー、NOT NULLなど）が取得されました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959879/63102280-199a-6549-0e4c-4e1203e8e53b.png)
「Include_DDL」をオンにしたので、「Schema Definition」タブにテーブル定義が取得できました


## 最後に


**取得できるテクニカルメタデータの種類は、多い印象を受けています。
高額なエンタープライズ規模のデータカタログツールほどではありませんが、データカタログツールの中でも充実していると思います。**
（過去に見たデータカタログツールには、テーブルカラムの桁数や制約を取得できないものもありました、、）
**Snowflakeの権限設定も比較的容易に行えます。**

**また、テーブル定義書をExcelファイルで手動管理している場合や、Excelファイルをデータカタログとして手動管理している場合においては、管理負荷の高さや、正確性の担保が課題となってしまうことがあります。
データカタログツールは、定期的に自動でこれらの情報を取得して更新できるので、前述の課題解決に有効です。**


次回は、今回取得したテクニカルメタデータにサンプルデータを付与したいと思います。

本記事についてご不明点、ご質問事項等があれば、コメントをお願いいたします。
また、本分野に関してご興味を持っていただけた方がいらっしゃれば、お気軽にお問い合わせください。