Skip to content

Concepts / Lineage and impact

Lineage and impact ​

Keel keeps column-level lineage from source columns to the consumers of a metric, and answers "what breaks if this changes?".

text
source columns ─► views ─► entities ─► dimensions / measures ─► metrics ─► releases ─► consumers
                                                                               (serving endpoints, MCP, exports)

Where edges come from ​

ScopeBuilt from
model:{id}The model document on main and every release: column → dimension (Derives), column → measure (Aggregates), filter columns (Filters), join keys (Joins), members → release (Consumes). SQL-defined entities are parsed through their query.
views:{sourceId}View definitions from the latest scan, parsed by Keel's SQL column-lineage extractor.
openlineage:{namespace}/{job}OpenLineage run events posted to POST /api/v1/lineage/openlineage (inputs, outputs and the column-lineage facet).
dbt:{project}A dbt manifest.json posted to POST …/lineage/dbt: model dependencies as dataset-level edges mapped onto scanned tables.

Lineage is rebuilt after every release and scan, and on demand (POST …/lineage:rebuild). Consumers from the serving query log (last 90 days) and DQ status are added when you read it.

What the SQL extractor understands ​

CREATE VIEW headers, aliases, every JOIN form with ON/USING, parenthesized joins, APPLY/LATERAL, subqueries, non-recursive CTEs, set operations, SELECT * (expanded from the snapshot), casts, date parts and window functions. It reports — and never guesses — recursive CTEs, table functions and VALUES, SELECT * over unknown tables, ambiguous unqualified columns, PIVOT, dynamic SQL and JSON paths. Backtick-quoted and Snowflake-specific view text is not parsed yet.

Using it ​

  • Lineage (/lineage/:assetRef): five lanes (source columns → entities → measures → metrics → consumers); select a node to trace up- and downstream (the rest dims); direction, depth (default 4) and a column-level toggle; DQ status overlaid as dots, with failing upstream rules shown as the root cause.
  • Impact (GET …/lineage/impact?asset=): everything downstream — model objects, releases, exports and serving consumers with last-used dates.
  • Change requests and drift use the same knowledge to classify breaking changes.

Asset references ​

Assets are addressed by name, so links survive releases: table:{source}/{schema}/{table}, column:{source}/{schema}/{table}/{column}, entity:{model}/{entity}, metric:{model}/{metric}, domain:{name}.

Anchor Keel is a working product name: one platform, a shared core and licensed modules (Keel Semantic, Keel Migrate). Documentation built from the repository — facts are derived from code, ADRs and the decisions log.