Skip to main content

Graphviz ER diagrams from a semql Catalog — cubes as nodes, joins as edges with crow's-foot arrowheads.

Project description

semql-erd

ER-diagram generator for semql catalogs. Walks the cubes and joins in a Catalog and emits a Graphviz DOT source (and convenience PNG/SVG when the graphviz Python bindings

  • system dot binary are available).

Useful when:

  • The catalog is past 10 cubes and reading the YAML/Python isn't enough to see the join shape at a glance.
  • A PR touches a Join and the reviewer wants a visual diff of the before / after graph.
  • Onboarding docs need a stable picture of what's in scope.

Install

pip install semql-erd            # DOT source only — no system deps
pip install "semql-erd[image]"   # + graphviz Python bindings
                                 #   (also needs the `dot` binary)

Quick start — DOT source

render_dot(catalog) is dependency-free: it produces a DOT-language string you can paste into any Graphviz renderer (Edotor is a quick web one).

from semql import Dialect, Catalog, Cube, Dimension, Join, Measure
from semql_erd import render_dot

orders = Cube(
    name="orders",
    dialect=Dialect.POSTGRES,
    table="orders",
    alias="o",
    measures=[Measure(name="revenue", sql="{o}.amount", agg="sum", unit="currency")],
    dimensions=[Dimension(name="region", sql="{o}.region", type="string")],
    joins=[Join(to="customers", relationship="many_to_one", on="{o}.cid = {c}.id")],
)
customers = Cube(
    name="customers",
    dialect=Dialect.POSTGRES,
    table="customers",
    alias="c",
    dimensions=[Dimension(name="name", sql="{c}.name", type="string")],
)

print(render_dot(Catalog([orders, customers])))

Quick start — PNG/SVG

from semql_erd import render_image

# Requires `pip install "semql-erd[image]"` AND the `dot` binary on PATH.
render_image(catalog, "catalog.png")  # PNG by default
render_image(catalog, "catalog.svg", format="svg")

Conventions

  • Nodes are cubes. The label is a Graphviz record showing the cube name (+ display_name suffix if set), the backend, and three field sections (measures, dimensions, time-dimensions).
  • Edges are Joins. Arrowhead shape encodes the relationship:
    • many_to_onecrow on the from-side, tee on the to-side
    • one_to_many → mirror of the above
    • one_to_onetee on both sides
  • Filtering mirrors the planner prompt: by default only cubes with expose_in_prompt=True (and non-META cubes) appear. Pass only_exposed=False for a full graph.
  • Layout defaults to rankdir="LR" (left-to-right). Pass rankdir="TB" for top-to-bottom.

CLI

python -m semql_erd path.to.module:catalog          # prints DOT to stdout
python -m semql_erd path.to.module:catalog out.svg  # writes a rendered image

Status

Early development. The DOT format is stable; record-section ordering and node ID naming may evolve.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

semql_erd-0.3.0.tar.gz (6.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

semql_erd-0.3.0-py3-none-any.whl (8.9 kB view details)

Uploaded Python 3

File details

Details for the file semql_erd-0.3.0.tar.gz.

File metadata

  • Download URL: semql_erd-0.3.0.tar.gz
  • Upload date:
  • Size: 6.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for semql_erd-0.3.0.tar.gz
Algorithm Hash digest
SHA256 1f48240801674fd0ee34cfa8f8375e05de62be052956a57693b75cea6a569dbd
MD5 d5e25bb769b1315655b728e78fd04cb0
BLAKE2b-256 a76e59eba71926c940813177bd4a185f5f64cdd1c0dfe7656d1bcdb42dbf7ba3

See more details on using hashes here.

File details

Details for the file semql_erd-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: semql_erd-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 8.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for semql_erd-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9e1b9f5c97a19b17b2186d1c19a34e286403c7e3d9ce1cb074449cf68947ad2b
MD5 3b9a36dfae8c44c3e366b962d5e5b2da
BLAKE2b-256 5d4074cf59272793ae8536998bfc4a76974f32b85a31a1b9e0a7b96bc3bf89b8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page