👏

dbtのドキュメントとテストのカバレッジを確認する"dbt-coverage"

2023/04/27に公開

1. はじめに

dbt-coverageはdbtのドキュメントやテストに漏れが無いかを確認するためのツールです。テーブルやビューをたくさん作成するとどうしてもドキュメントやテストの追記を忘れてしまいがちになります(反省...)。そこでdbt-coverageを使って、カバレッジを計測することでドキュメントへの追記漏れを減少させることができるはず! 今回はdbt-coverageの使用感およびどのようなことができるのかの確認していきたいと思います。

GitHubにあるデモをなぞって行きます

2. 概要

  1. dbt-coverageには2つのコマンドがあります。
  • compute (詳細はdbt-coverage compute --helpを参照)
  • compare (詳細はdbt-coverage compare --helpを参照)
  1. 計算方法
    dbt docs generateで作成されるtarget/catalog.jsontarget/manifest.jsonを基にカバレッジを算出します

3. 手順

3-1. インストール

pip install dbt-coverage

3-2. カバレッジの確認

  • デモでも使用されているように、jaffle_shopのデータを使って行きます

3-2-1. モデルの実行

$ cd jaffle_shop
$ dbt run

3-2-2. ドキュメントの作成

  • target/catalog.jsontarget/manifest.jsonを作成します
$ dbt docs generate

3-2-3. ドキュメントのカバレッジを確認

  • ドキュメントのカバレッジを算出して行きます
  • coverageフォルダ配下に出力されたjsonファイルを格納します
$ mkdir coverage
$ dbt-coverage compute doc --cov-report coverage/coverage-doc.json

Coverage report
=====================================================================
dbt.customers                                          6/7      85.7%
dbt.orders                                             9/9     100.0%
dbt.raw_customers                                      0/3       0.0%
dbt.raw_orders                                         0/4       0.0%
dbt.raw_payments                                       0/4       0.0%
dbt.stg_customers                                      0/3       0.0%
dbt.stg_orders                                         0/4       0.0%
dbt.stg_payments                                       0/4       0.0%
=====================================================================
Total                                                 15/38     39.5%

3-2-4. テストのカバレッジを確認

  • テストのカバレッジを算出して行きます
  • coverageフォルダ配下に出力されたjsonファイルを格納します
$ dbt-coverage compute test --cov-report coverage/coverage-test.json

Coverage report
=====================================================================
dbt.customers                                          1/7      14.3%
dbt.orders                                             8/9      88.9%
dbt.raw_customers                                      0/3       0.0%
dbt.raw_orders                                         0/4       0.0%
dbt.raw_payments                                       0/4       0.0%
dbt.stg_customers                                      1/3      33.3%
dbt.stg_orders                                         2/4      50.0%
dbt.stg_payments                                       2/4      50.0%
=====================================================================
Total                                                 14/38     36.8%

3-2-5. カバレッジの結果をマークダウンで書き出す

$ dbt-coverage compute doc --cov-report coverage/test.md --model-path-filter models/staging/ --cov-format markdown

=====================================================================
# Coverage report
| Model | Columns Covered | % |
|:------|----------------:|:-:|
| dbt.stg_customers                                                      |     0/3     |   0.0% |
| dbt.stg_orders                                                         |     0/4     |   0.0% |
| dbt.stg_payments                                                       |     0/4     |   0.0% |
| Total                                                                  |     0/11    |   0.0% |

3-2-6. カバレッジの比較

  • 2つのカバレッジを比較します
$ dbt-coverage compute doc --cov-report coverage/coverage-doc_1.json
$ dbt-coverage compare  coverage/coverage-doc.json  coverage/coverage-doc_1.json

              before     after            +/-
=============================================
Coverage      39.47%    39.47%         +0.00%
=============================================
Tables             8         8          +0/+0
Columns           38        38          +0/+0
=============================================
Hits              15        15          +0/+0
Misses            23        23          +0/+0
=============================================

==============================================================================================
Catalog                                              15/38   (39.47%)  ->    15/38   (39.47%) 
==============================================================================================

感想

  • 非常に簡単にテストのカバレッジを算出できるんだなぁ〜と感心しました(どこから目線?)
  • カバレッジの結果およびカバレッジのdiffはCIに盛り込んで(例えばGitHub Actionなど)プルリク時に毎回確認できれば良きかなっと思っています。
  • 次回はそこの辺を記事にしたいですねぇ〜〜〜

参考

Discussion