Skip to content

datnguye/dbterd

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

dbterd

Generate ERD-as-a-code from your dbt projects

dbterd logo

Transform your dbt artifact files or metadata into stunning Entity Relationship Diagrams using multiple formats: DBML, Mermaid, PlantUML, GraphViz, D2, and DrawDB

docs PyPI version python-cli License: MIT python codecov

dbterd stars

🎯 Entity Relationship Detection

dbterd intelligently detects entity relationships through:

For detailed configuration options, see our CLI References.

🎨 Supported Output Formats

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!

πŸš€ Installation

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

πŸ’‘ Examples

CLI Examples

πŸ–±οΈ 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

Python API Examples

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
Loading

🀝 Contributing

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

buy me a coffee

πŸ‘₯ Contributors

A huge thanks to our amazing contributors! πŸ™

πŸ“§ Support

Need help? We're here for you! Check πŸ“– Documentation, πŸ› Report Issues and πŸ’¬ Discussions


Made with ❀️ by the dbterd community


Sponsored by GitAds

Sponsored by GitAds

Sponsor this project

 

Contributors 12

Languages