openMetadataとdbtのコラボレーション
今回も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で見ることができる |
詳細は以下公式ドキュメントをご参照ください。
それではいくつかの機能を試してみたいと思います。
dbtの取り込み
まず、ワークフローでdbtの情報をmetadataに取り込む必要があります。
Add Ingestionから「Add dbt Ingestion」をクリックすると、以下の設定画面に遷移します。
取り込むデータは以下です。
- catalog.json
- manifest.json #このファイルは取り込み必須です
- run_results.json
取り込み方法
- ローカルストレージからの取り込み
- HTTP or Fileサーバからの取り込み
- dbt cloudからの取り込み
- S3からの取り込み
- GCSからの取り込み
今回はローカルストレージからの取り込みで検証します。
※それ以外の選択肢は手段を持ってないためです。。。
ローカルストレージからの取り込み
ローカルからの取り込みの場合、ファイルパスを指定する必要があります。
なので、どこに配置するかというと、Ingestionコンテナ内に配置します。
Ingestionコンテナにアクセスする
% 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を参考にしてください。
dbt Tests and Test Results
dbtで定義したテストやその結果を参照できます。
具体的な方法は分からないですが、metadataからdbtのテストが実行できるとかできないとか。。。
これは要調査ですね。
まとめ
普段dbtを使って開発をしているなら、データカタログツールとしてopeMetadataは強力なツールになり得ると感じました。
dbt docsの静的ファイルもホストティングしなくて良いですし、定期的にdbtファイルを取り込むワークフローを設定しておけば、テスト実行結果常に最新のものを確認できます。
あとは、metadataからdbtのテストが定期実行できれば最高ですね。
なんか出来るっぽいので調査して、また記事にしたいと思います。
Discussion
Lineage が前後で差がないのは、dbt において STG_ORDERS が materialized = view(デフォルト)になっているからではないでしょうか(STG_ORDERS Type が View になっている) 。STG_ORDERS がビューで作成されているのでデータベースを OpenMetadata に取り込む際に、既にビュー定義からリネージ情報が作成されているのだと思います。
materialized = table のケースであれば、データベースからリネージ情報が取得できないので前後で差が出ると思います。
ご指摘ありがとうございます!
おっしゃるとおりMetadata IngestionでViewを取り込む設定としておりました。