🐡

dbt docs generate で作成するdocumentにおいて一部のmodelだけを表示することはできるのか?

2024/12/20に公開

この記事はdbt Advent Calendar 2024のシリーズ2の19日目の記事です。

背景

  • dbt docs genereteで作成するdocumentはmodelの関係性を図示やデータカタログを作成するできる便利な機能ですが、modelやsourceの数が増えた時に特定の部分に限定してLineageやデータカタログを作れないか気になった

  • UI上のLineageでは以下のようにmodelのpathやtagsで指定して部分的に表示することができる

  • 関連記事

https://zenn.dev/analytics_eng/articles/3fec02f9eb82a9

調査結果

  • 結論としては selectやexcludeは利用可能だけど、適用されるのはcompileのみなのでdocumentの表示を限定することは無理っぽい

参考: https://discourse.getdbt.com/t/dbt-docs-generate-exclude-not-working-and-doesnt-exclude-the-models-based-on-tags/6640/2

  • どのような結果になったのかを簡単に紹介する。とりあえず使ったmoduleのversionを貼っておく
dbt-core:
  - installed: 1.8.9
Plugins:
  - duckdb: 1.8.4
  • 背景の2枚目に貼ったLineageを再現するために必要なmodels/customers_features_agg.sql と依存するmodelのみをcompileする
dbt docs generate \
  --select "+models/customers_features_agg.sql" \
  --static

背景の1枚目と同様にselectで指定したmodel以外もdocumentに含まれています

ただし、models/customers_features_agg.sqlの実行に必要なcustomersの中間処理はcompileされていますが、ordersの中間処理はcompileされていない

  • dbt_project.ymlにおいて enabled っというconfigを使うことで特定のmodelに限定して compileやdocument作成を行うことはできる。ただし部分的にdocumentを作るためにその都度dbt_project.ymlを書き換えるのはあまり良くない感じがする。こういったケースではdbt project自体を別に切り分けるほうがよい。
models:
  tutorial:
    # Config indicated by + and applies to all files under models/example/
    +materialized: table
    orders: 
      enabled: false

Discussion