Skip to content

datnguye/dbterd

Folders and files

NameName
Last commit message
Last commit date

Latest commit

540da02 · Sep 3, 2024
Jul 28, 2024
Mar 19, 2023
Sep 3, 2024
Sep 3, 2024
Sep 3, 2024
Sep 3, 2024
Mar 19, 2023
Sep 8, 2023
Mar 19, 2023
Apr 17, 2023
Apr 30, 2023
Jan 13, 2024
Sep 3, 2024
Mar 30, 2024
Sep 3, 2024
Sep 3, 2024
Apr 3, 2024

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):

PyPI version python-cli License: MIT python codecov

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
    # 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:

    Unable to render rich display

    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 💌

dbterd stars buy me a coffee

Finally, super thanks to our Contributors: