Transform your dbt artifact files or metadata into stunning Entity Relationship Diagrams using multiple formats: DBML, Mermaid, PlantUML, GraphViz, D2, and DrawDB
dbterd intelligently detects entity relationships through:
- π§ͺ Test Relationships (default method)
- ποΈ Semantic Entities (use
-a
option)
For detailed configuration options, see our CLI References.
Format | Description | Use Case |
---|---|---|
DBML | Database Markup Language | Interactive web diagrams |
Mermaid | Markdown-friendly diagrams | Documentation, GitHub |
PlantUML | Text-based UML | Technical documentation |
GraphViz | DOT graph description | Complex relationship visualization |
D2 | Modern diagram scripting | Beautiful, customizable diagrams |
DrawDB | Web-based database designer | Interactive database design |
π― Try the Quick Demo with DBML format!
pip install dbterd --upgrade
Verify Installation:
dbterd --version
Tip
For dbt-core Users: Upgrade dbt-artifacts-parser
to support newer dbt-core versions:
pip install dbt-artifacts-parser --upgrade
π±οΈ Click to explore CLI examples
# π Select all models in dbt_resto
dbterd run -ad samples/dbtresto
# π― Select multiple dbt resources (models + sources)
dbterd run -ad samples/dbtresto -rt model -rt source
# π Select models excluding staging
dbterd run -ad samples/dbtresto -s model.dbt_resto -ns model.dbt_resto.staging
# π Select by schema name
dbterd run -ad samples/dbtresto -s schema:mart -ns model.dbt_resto.staging
# π·οΈ Select by full schema name
dbterd run -ad samples/dbtresto -s schema:dbt.mart -ns model.dbt_resto.staging
# π Other sample projects
dbterd run -ad samples/fivetranlog -rt model -rt source
dbterd run -ad samples/facebookad -rt model -rt source
dbterd run -ad samples/shopify -s wildcard:*shopify.shopify__*
# π Custom relationship detection
dbterd run -ad samples/dbt-constraints -a "test_relationship:(name:foreign_key|c_from:fk_column_name|c_to:pk_column_name)"
# π» Your local project
dbterd run -ad samples/local -rt model -rt source
Generate Complete ERD
from dbterd.api import DbtErd
# Generate DBML format
erd = DbtErd().get_erd()
print("ERD (DBML):", erd)
# Generate Mermaid format
erd = DbtErd(target="mermaid").get_erd()
print("ERD (Mermaid):", erd)
Generate Single Model ERD
from dbterd.api import DbtErd
# Get ERD for specific model
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)
Sample 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
We welcome contributions! π
Ways to contribute: π Report bugs | π‘ Suggest features | π Improve documentation | π§ Submit pull requests
See our Contributing Guide for detailed information.
Show your support:
- β Star this repository
- π’ Share on social media
- βοΈ Write a blog post
- β Buy me a coffee
A huge thanks to our amazing contributors! π
Need help? We're here for you! Check π Documentation, π Report Issues and π¬ Discussions