Product
Column-level lineage
A live map of every column from source table to the models your dashboards read, so you know what a change will break before you merge it.
How it works
Tessel builds lineage from your compiled SQL, not just your ref calls, so it follows each column through renames, joins and casts. The map updates after every run and every merge, and it covers sources, staging models, marts and dbt exposures.
On every pull request that touches a model, Tessel comments with what is downstream: the models, columns and exposures that read the changed columns, and who owns them. Reviewers see the blast radius before they approve, not after something breaks.
The same lineage powers root-cause detection and auto-fix pull requests, which is why Tessel can tell the difference between the model that failed first and the forty that failed because of it.
Step by step
-
Parse
Tessel compiles your project and parses every model’s SQL to follow each column.
-
Map
Sources, models, columns and exposures join one graph that updates after each run.
-
Comment
Pull requests that change a model get a comment listing everything downstream.
By the numbers
- to map a 500-model project
- 2 min
- First run; later updates take seconds
- of dbt exposures linked
- 100%
- Dashboards defined in dbt appear on the map
- of lineage history on Team
- 90 days
- Unlimited on Enterprise
It found a schema change upstream that had been silently dropping rows for three weeks.
Questions about column-level lineage
Which SQL dialects does lineage support?
Snowflake, BigQuery and Postgres, including Jinja and macros that compile to them.
Does it work without dbt?
Yes, for Airflow and Dagster jobs that run SQL files or SQL in Python operators. dbt projects get the richest map because the manifest describes every model.
Can we export the lineage graph?
Yes, as JSON through the API, or as an image from the lineage view.
See it on your own pipelines
A 30-minute demo on a copy of your project, or start free with up to 25 models.