Visualize column-level lineage of dbt models in the browser, parsed from manifest.json/catalog.json with sqlglot
Reason this release was yanked:
Yank
Project description
dbt-column-lineage
This is a tool to visualize the column level lineage of dbt models. It uses the manifest.json and catalog.json files generated by dbt to create a graph of the lineage of the models. It is a web application that uses a FastAPI backend and a Next.js frontend.
Demo
Trace a column across models, then expand more columns to grow the lineage interactively:
The demo runs on the synthetic dbt project under
demo/(no warehouse required). Regenerate itsmanifest.json/catalog.jsonwithpython demo/build_demo_manifest.py.
quickstart
Install dbt-column-lineage using pip:
pip install dbt-column-lineage
Run the following command:
# go to your dbt project directory
cd your-dbt-project/
# edit your model file
vi models/test.sql
# generate the manifest.json and catalog.json files
dbt docs generate
# set the environment variable for the dialect you are using
export SQLGLOT_DIALECT=snowflake
# Launch dbt-column-lineage with test.sql as the initial model
dbt-column-lineage run-params
development
To develop the application, you will need to run the backend and frontend separately.
git clone git@github.com:tomoki-takahashi-oisix/dbt-column-lineage.git
cd dbt-column-lineage
for backend
activate venv and run the following commands:
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
uvicorn --app-dir src dbt_column_lineage.main:app --port=5000 --reload
for frontend
run the following commands:
npm install
npm run dev
after the frontend is running, Let's access http://localhost:3000
for Looker integration (optional)
If you want to integrate with Looker, you can use the following commands:
# set the environment variables
export LOOKERSDK_CLIENT_ID=(your client id)
export LOOKERSDK_CLIENT_SECRET=(your client secret)
export LOOKERSDK_BASE_URL=(your looker base url)
export LOOKER_IGNORE_FOLDERS=(comma separated list of folders to ignore)
export LOOKER_IGNORE_ELEMENTS=(comma separated list of dashboard elements to ignore)
# it analyzes the looker models; target/looker_analysis.json will be created
python tools/looker_analyzer.py
# rerun the backend
uvicorn --app-dir src dbt_column_lineage.main:app --port=5000 --reload
for Google OAuth login test (optional)
If you want to test the OAuth login, you can use the following commands:
export GOOGLE_CLIENT_ID=(your client id)
export GOOGLE_CLIENT_SECRET=(your client secret)
# fixed session signing key (see note below)
export SESSION_SECRET=$(python3 -c "import secrets; print(secrets.token_hex(32))")
docker build -t test .
docker run -p 5000:5000 -e USE_OAUTH=true -e GOOGLE_CLIENT_ID=$GOOGLE_CLIENT_ID -e GOOGLE_CLIENT_SECRET=$GOOGLE_CLIENT_SECRET -e SESSION_SECRET=$SESSION_SECRET -e DEBUG_MODE=true test
SESSION_SECRET— The container runsuvicorn --workers 2(multiple processes), and a deployment may also scale out to multiple instances. Sessions are stored in a signed cookie, so every process must share the same signing key. WithUSE_OAUTH=true, set a fixedSESSION_SECRET(any stable random string) or sign-in breaks across workers (login loops / API401). If unset, each process generates its own random key (fine only for a single process). Without OAuth it is not needed.
limiting heavy lineage queries (optional)
For very large projects a single request — e.g. reverse lineage of a hub column consumed by many models — can take a long time. Set MAX_LINEAGE_SECONDS to a wall-clock budget (seconds); when traversal exceeds it, the server stops and returns the partial result flagged truncated (the UI shows a banner) instead of hanging. Default -1 = unbounded. In a hosted deployment set it below your gateway's request timeout so you get 200 + truncated rather than a gateway timeout.
# example: cap lineage traversal at 100 seconds
export MAX_LINEAGE_SECONDS=100
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dbt_column_lineage-0.6.0.tar.gz.
File metadata
- Download URL: dbt_column_lineage-0.6.0.tar.gz
- Upload date:
- Size: 1.8 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b6959a3e421990baaaf731279acb14236e5047ef712bdeaaa19987fb7d7c0c3a
|
|
| MD5 |
14a8be94453152ca98b50b0ae84ab1fa
|
|
| BLAKE2b-256 |
d802ed355dc59fac30b172c65b03795e76c83734a85336947c72d8f12fa3d533
|
File details
Details for the file dbt_column_lineage-0.6.0-py3-none-any.whl.
File metadata
- Download URL: dbt_column_lineage-0.6.0-py3-none-any.whl
- Upload date:
- Size: 1.0 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b54611ede57cc65cd2bb0c1801a94c494c80f57f4b6ff5384cd3d14a30a01157
|
|
| MD5 |
1040b1048fddb5b47820f17de00cf437
|
|
| BLAKE2b-256 |
7b7952aa33405574dee5b0ca0f7ea742418669e259ec3b4707fe5356c9859aa6
|