🕌

openMetadataとdbtのコラボレーション

2023/07/23に公開2

今回もopenMetadata(以下metadata)関連の記事です。色々と触っていて気になった機能があったのでどういうことができるのか検証してみました。
まずは以下のスクショをご覧ください。

そうです。dbtを取り込めるようです。
openMetadataとdbtで何ができるのでしょうか。

何ができるのか?

機能としては、以下のとおりです。

機能 説明
dbt Queries dbtモデルの作成に使用されたクエリは、metadaのdbtタブで確認することができる
dbt Lineage dbt docsで見れていたリネージをmetadataで見ることができる
dbt Tags dbtで設定したタグ情報をmetadataで見ることができる
dbt Owner dbtで定義したオーナー情報をmetadataで見ることができる
dbt Descriptions dbtのmanifest.jsonとcatalog.jsonから説明をインポートし、それぞれのテーブルとカラムに割り当てることができる
dbt Tests and Test Results dbtで実施したテスト結果をmetadataで見ることができる

詳細は以下公式ドキュメントをご参照ください。
https://docs.open-metadata.org/v1.0.0/connectors/ingestion/workflows/dbt

それではいくつかの機能を試してみたいと思います。

dbtの取り込み

まず、ワークフローでdbtの情報をmetadataに取り込む必要があります。
Add Ingestionから「Add dbt Ingestion」をクリックすると、以下の設定画面に遷移します。

取り込むデータは以下です。

  • catalog.json
  • manifest.json #このファイルは取り込み必須です
  • run_results.json

取り込み方法

  • ローカルストレージからの取り込み
  • HTTP or Fileサーバからの取り込み
  • dbt cloudからの取り込み
  • S3からの取り込み
  • GCSからの取り込み

今回はローカルストレージからの取り込みで検証します。
※それ以外の選択肢は手段を持ってないためです。。。

ローカルストレージからの取り込み

ローカルからの取り込みの場合、ファイルパスを指定する必要があります。
なので、どこに配置するかというと、Ingestionコンテナ内に配置します。

Ingestionコンテナにアクセスする

コンテナIDを確認する
% docker ps | grep ingestion
07d91307c339   docker.getcollate.io/openmetadata/ingestion:1.1.0      "/bin/bash /opt/airf…"   23 hours ago   Up 22 hours               0.0.0.0:8080->8080/tcp                           openmetadata_ingestion
コンテナ内にファイルを設置する場所を作成する
$ docker exec -it 07d91307c339 bash
$ pwd
/home/airflow
$ mkdir folder

ディレクトリパスは「/home/airflow/folder」としました。

dbtファイルをコンテナ内に配置する

$ docker cp manifest.json 07d91307c339:/home/airflow/folder
$ docker cp run_results.json 07d91307c339:/home/airflow/folder
$ docker cp catalog.json 07d91307c339:/home/airflow/folder

dbt Ingestionワークフローでdbtファイルを取り込む

ワークフローの設定箇所は赤枠の部分です。

ワークフロー作成後、実行し以下のとおり「Success」となっていればOKです。

dbt Queries

dbtのクエリはこんな感じで見ることができます。

dbtファイルを取り込んだことで、「dbt」というタブが追加されています。
さらに「dbt」タブ横にある「View Definition」をクリックすると、コンパイルされたクエリを見ることができます。

dbt Lineage

リネージはファイル追加する前後で何が変わったか分からなかったです。。。

dbt Descriptions

すみません。dbtでDesctiption書いてないので良い例がお見せできないです。。
なので、公式で公開されているDescriptionを参考にしてください。
https://docs.open-metadata.org/v1.0.0/connectors/ingestion/workflows/dbt#5-dbt-descriptions

dbt Tests and Test Results

dbtで定義したテストやその結果を参照できます。
具体的な方法は分からないですが、metadataからdbtのテストが実行できるとかできないとか。。。
これは要調査ですね。

まとめ

普段dbtを使って開発をしているなら、データカタログツールとしてopeMetadataは強力なツールになり得ると感じました。
dbt docsの静的ファイルもホストティングしなくて良いですし、定期的にdbtファイルを取り込むワークフローを設定しておけば、テスト実行結果常に最新のものを確認できます。
あとは、metadataからdbtのテストが定期実行できれば最高ですね。
なんか出来るっぽいので調査して、また記事にしたいと思います。

Discussion

ABE MasanoriABE Masanori

Lineage が前後で差がないのは、dbt において STG_ORDERS が materialized = view(デフォルト)になっているからではないでしょうか(STG_ORDERS Type が View になっている) 。STG_ORDERS がビューで作成されているのでデータベースを OpenMetadata に取り込む際に、既にビュー定義からリネージ情報が作成されているのだと思います。

materialized = table のケースであれば、データベースからリネージ情報が取得できないので前後で差が出ると思います。

kyamikyami

ご指摘ありがとうございます!
おっしゃるとおりMetadata IngestionでViewを取り込む設定としておりました。