Generate the ERD-as-a-code (DBML, Mermaid, PlantUML, GraphViz, D2) from dbt artifact files (dbt Core
) or from dbt metadata (dbt Cloud
)
Entity Relationships are configurably detected by (docs):
- Test Relationships (default)
- Semantic Entities (use
-a
option)
pip install dbterd --upgrade
Verify installation:
dbterd --version
Tip
For dbt-core
Users, it's highly recommended to upgrade dbt-artifacts-parser
to the latest version in order to support the newer dbt-core
version which would cause to have the new manifest / catalog json schema:
👉 pip install dbt-artifacts-parser --upgrade
-
Play with CLIs:
Click me
# select all models in dbt_resto dbterd run -ad samples/dbtresto # select all models in dbt_resto, Select multiple dbt resources dbterd run -ad samples/dbtresto -rt model -rt source # select only models in dbt_resto excluding staging dbterd run -ad samples/dbtresto -s model.dbt_resto -ns model.dbt_resto.staging # select only models in schema name mart excluding staging dbterd run -ad samples/dbtresto -s schema:mart -ns model.dbt_resto.staging # select only models in schema full name dbt.mart excluding staging dbterd run -ad samples/dbtresto -s schema:dbt.mart -ns model.dbt_resto.staging # other samples dbterd run -ad samples/fivetranlog dbterd run -ad samples/fivetranlog -rt model -rt source dbterd run -ad samples/facebookad dbterd run -ad samples/facebookad -rt model -rt source dbterd run -ad samples/shopify -s wildcard:*shopify.shopify__* dbterd run -ad samples/shopify -rt model -rt source dbterd run -ad samples/dbt-constraints -a "test_relationship:(name:foreign_key|c_from:fk_column_name|c_to:pk_column_name)" # your own sample without committing to repo dbterd run -ad samples/local -rt model -rt source
-
Play with Python API (whole ERD):
from dbterd.api import DbtErd erd = DbtErd().get_erd() print("erd (dbml):", erd) erd = DbtErd(target="mermaid").get_erd() print("erd (mermaid):", erd)
-
Play with Python API (1 model's ERD):
from dbterd.api import DbtErd dim_prize_erd = DbtErd(target="mermaid").get_model_erd( node_unique_id="model.dbt_resto.dim_prize" ) print("erd of dim_prize (mermaid):", dim_prize_erd)
Here is the output:
erDiagram "MODEL.DBT_RESTO.DIM_PRIZE" { varchar prize_key nvarchar prize_name int prize_order } "MODEL.DBT_RESTO.FACT_RESULT" { varchar fact_result_key varchar box_key varchar prize_key date date_key int no_of_won float prize_value float prize_paid int is_prize_taken } "MODEL.DBT_RESTO.FACT_RESULT" }|--|| "MODEL.DBT_RESTO.DIM_PRIZE": prize_key
🏃Check out the Quick Demo with DBML!
If you've ever wanted to contribute to this tool, and a great cause, now is your chance!
See the contributing docs CONTRIBUTING for more information.
If you've found this tool to be very helpful, please consider giving the repository a star, sharing it on social media, or even writing a blog post about it 💌
Finally, super thanks to our Contributors: