OpenMetadataからRedshiftに接続してメタデータを取得してみた

2023.08.31

Redshiftと同一VPC内にいるEC2インスタンスのOpenMetadataから、 Redshiftに接続してメタデータなどの取得を行ってみました。

前提

基本的には前回の記事 https://dev.classmethod.jp/articles/openmetadata-ec2-al2-preparing/ で立ち上げたOpenMetadataを利用しています。 しかし実際はちょっと状況が違う点もあります。 特別大きな違いはないので問題はないかと思いますが、相違点を掲示しておきます

前回記事で立てた状況との相違点

  • AWSリージョン
    • 前回: ap-northeast-1
    • 今回: us-east-1
  • EBSボリューム
    • 前回: 8GB
    • 今回: 128GB

準備

今回はEC2インスタンスとRedshiftは同一のVPCにいる前提なので、 インフラ的にはセキュリティグループの設定をしておけばOKでした。

Redshiftにアタッチされているセキュリティグループを編集して、 EC2インスタンスにアタッチされているセキュリティグループからの5439ポートへの接続だけを許可しておきます。

Redshiftへの接続をやってみた

基本的に「こうやったらできそう」という流れで進めていっただけです。 OpenMetadataはUIがかなりわかりやすいので、 特別ドキュメントなどを見なくてもこの辺の操作はすぐできる印象です!

OpenMetadataにadminユーザとしてログインします。

admin, adminで入ります。 ユーザ管理についてはまだほとんどわかっていないのですが、 試しに作った一般ユーザでは接続の追加などができなかったので、adminで行っていきます。

「Settings」の「Databases」から「Add New Service」します。

Redshiftを選択して「Next」。 AWSのアイコンは古いままですね...。

名前を設定します。 任意の名前でOKです。 Descriptionは空白のままで大丈夫です。

接続情報を設定します。 今回はEC2とRedshiftは同一VPC内にある前提です。

SSL Modeは「require」を選択し、ValidateSSLClientConfigに証明書のパスを指定します。

証明書は # 接続のセキュリティオプションを設定する のページから取得することができます。 これをEC2上の任意の場所に配置してパスを指定してあげます。

きちんと設定できていれば「Test Connection」で全てSuccessとなります。

最後にSaveしたらRedshiftへの接続の出来上がりです!

メタデータを取得してみる

接続しただけじゃ何も面白くないので、メタデータの取得をしてみます。 ここで言っている「メタデータ」は、主にテーブルの定義などの情報を指します。

「Add Metadata Ingestion」を選択します。 なお「Ingestion」とは「摂取」を意味する英語で、 まさにDBからデータを取得する行為をさしています。

名前は自動で適当なものをつけてくれるのでそのままにしました。

せっかくだからViewの情報も取ろうと思いますので、 「Include Views」を有効にしてみます。

次に取得の頻度を設定します。

OpenMetadataではDBなどからメタデータを取得するAirflowのDAGを作成します。 今まさに行っているIngestionの作成は、すなわち一つのAirflow DAGを作成することに相当しています。 そしてこのAirflow DAGを実行する頻度をここで設定するわけです。

ここでは毎日0時(UTC)に動く設定とします。

これでメタデータを取得するIngestionができました。

「Ingestions」タブを見ると今作ったIngestionがあり、 自動的に初回のジョブ実行が走った状態になっていました。

ジョブ完了を待っている間に、画面上部の検索窓などを見ていきます。

今作ったようなIngestionは、Pipelinesというカテゴリにいて、 アイコンからも実体はAirflowであることがわかります。

しばらく待つと実行されていたジョブが「Success」となりますので、 これでメタデータの取得が完了です。

メタデータが取得できたら検索窓でテーブル名などを検索してみると、 Redshiftに存在するテーブル名が自動的に取得できていることが確認できます。

このテーブルのページを開き、「Schema」タブを見ると、 テーブルの各カラムの定義などがきちんと見えています。 (画像は、正確にはビューのSchema)

次に「Lineage」タブに移動すると、 選択したビューが、どのテーブルから作られているかの親子関係がグラフィカルに表示されます。

ちょっとボカシだらけで申し訳ないのですが、枠の下半分にはカラム名が並んでいます。 カラムレベルでも、ソースとなるテーブルとの関係も図示されそうなところですが、 なぜかビューの場合はそれが表示されないようです。 実はテーブル同士の親子関係であれば、カラムレベルで線が表示されます。 なぜビューでは表示されないのかはよくわかっていないです。 機能的には十分可能そうなので設定すれば表示されるのかもしれません。

メタデータを取得しただけですが、 ビューとテーブルの関係性をグラフィカルに見ることができ、なかなか良さそうですね!

なおメタデータだけなので、Sample Dataタブなどは空っぽのままです。 これらはメタデータではなく、別のIngestionジョブを作ることで連携が可能です。 それらもメタデータのIngestion作成とほぼ同じでマウスでぽちぽちクリックするだけで作成できます。

まとめ

OpenMetadataからRedshiftへ接続して、メタデータの取得までをやってみました。

ビューがどのテーブルから作られているかというLineage情報がグラフィカルに見ることができ、 親子関係をクリックで色付けしたりできました。 これがクリックぽちぽちだけでできるのはなかなか良いですね! 次はテーブル同士の関係も表示できるようにしてみたいと思います。

以上、誰かの参考になれば幸いです。