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 catalogues. 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 catalogue 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 Backend, Catalog, Cube, Dimension, Join, Measure
from semql_erd import render_dot

orders = Cube(
    name="orders",
    backend=Backend.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",
    backend=Backend.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.1.0.tar.gz (6.7 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.1.0-py3-none-any.whl (8.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: semql_erd-0.1.0.tar.gz
  • Upload date:
  • Size: 6.7 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.1.0.tar.gz
Algorithm Hash digest
SHA256 2587cd9398666635f32564707782b774c3fa41bcc74d5a745697409508914b10
MD5 775cc4fc5e9d446254743d0309fb4a40
BLAKE2b-256 1f79ca86edcac51fc77f881fc905043a497a5eddab8ccfefe21cf02c78b17751

See more details on using hashes here.

File details

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

File metadata

  • Download URL: semql_erd-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 8.7 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.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ebebad923d68c0f26326165fdc6a88e2a82394fdfd8a64510830f24b6a972bcb
MD5 1ffa229e1de57b0d01cd5fe69d7a4155
BLAKE2b-256 db84c28be638522eb917731b26e9d06a52c4ce2848570907ac8492ae11ce2907

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