dbterd
Generate the ERD-as-a-code (DBML, Mermaid, PlantUML, GraphViz, D2, DrawDB) from dbt artifact files (dbt Core
) or from dbt metadata (dbt Cloud
)
Entity Relationships are configurably detected by (docs):
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
Quick examine with existing samples
-
Play with CLIs:
Click me
dbterd run -ad samples/dbtresto
dbterd run -ad samples/dbtresto -rt model -rt source
dbterd run -ad samples/dbtresto -s model.dbt_resto -ns model.dbt_resto.staging
dbterd run -ad samples/dbtresto -s schema:mart -ns model.dbt_resto.staging
dbterd run -ad samples/dbtresto -s schema:dbt.mart -ns model.dbt_resto.staging
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)"
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!
Contributing ✨
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: