Lineage¶
Mostly additive — but the new time-window filter has non-obvious traversal semantics, and the knowledge-graph renderer is replaced.
New FQN-based edge APIs¶
· Affects: nobody negatively — the UUID-based endpoints remain
| New endpoint | Purpose |
|---|---|
PUT /v1/lineage/{fromEntity}/name/{fromFQN}/{toEntity}/name/{toFQN} | Create/replace an edge by FQN |
PATCH /v1/lineage/{fromEntity}/name/{fromFQN}/{toEntity}/name/{toFQN} | Patch an edge by FQN |
GET /v1/lineage/getLineageEdge/{fromEntity}/name/{fromFQN}/{toEntity}/name/{toFQN} | Read a single edge by FQN |
DELETE /v1/lineage/source/name/{entityType}/{entityFQN}/type/{lineageSource} | Delete all edges of one lineageSource for an entity |
The DELETE .../source/... endpoint is the clean way to re-run a lineage source (dbt, OpenLineage, manual) without wiping edges contributed by other sources.
Batch hydration¶
· Replaces N per-node GETs
{
"entities": [ { "type": "table", "id": "…" } ], // 1–200 items, only type + id required
"fields": "tags,owners,domains",
"include": "non-deleted"
}
The response groups hydrated entities by entityType. fields is applied uniformly — fields that do not apply to a given entity type are silently skipped by that type's repository.
Action
Graph UIs and lineage exporters that fan out one entity GET per node should switch to a single hydrate call per page of nodes.
Time-window lineage — read the traversal semantics¶
New capability with surprising semantics
searchLineageRequest and entityCountLineageRequest gain startTime / endTime (epoch millis), matched by range overlap on edge createdAt / updatedAt.
The window is a hard prune, not a post-filter
From the schema:
the window is applied as a hard prune during graph traversal (point-in-time semantics) — an out-of-window edge severs discovery of everything reachable only through it, in both upstream and downstream directions. This means
preservePathsdoes not extend to the time window: a node is shown only if it is reachable from the root through edges that are all in-window.
Two consequences worth planning for:
- A single stale edge hides a whole subtree. If the edge from
A → Bfalls outside the window, nothing downstream ofBis returned even if those edges are in-window. - Legacy edges always match. Edges with no timestamps match any window for backwards compatibility, so a window query over a mix of legacy and temporal data returns all legacy edges plus the in-window temporal ones. Do not read the result as a clean point-in-time snapshot until your graph is fully timestamped.
Setting endTime alone gives as-of/point-in-time semantics: edges that existed on or before that instant.
Lineage change events¶
· Affects: webhook and event-subscription consumers
type/changeEventType.json adds entityLineageAdded, entityLineageDeleted and entityLineageUpdated. Lineage mutations previously surfaced only as generic entity updates (or not at all).
Action
Alert and webhook consumers with exhaustive event-type handling need branches for the three new types. Subscriptions that filtered on entityUpdated to catch lineage changes may now see those changes arrive under the new types instead.
Lineage UI¶
· Affects: users and fork maintainers
| Change | Detail |
|---|---|
| Time filter | New LineageTimeFilter control drives the startTime/endTime request fields |
| Traced paths | Traced edges and nodes are rendered distinctly |
| Pagination | Execution history and edge deletion are paginated |
| Node edits | Entity edits reflect on graph nodes without a full graph reload |
| Component stack | LineageLayers, CanvasEdgeRenderer, LineageTable, LineageNodeLabelV1 and LineageControlButtons migrate off MUI/AntD onto the shared core components; the MUI Drawer and AntD Modal are replaced |
| Utilities | EntityLineagePureUtils extracted and split into domain files |
Knowledge Graph renderer replaced¶
· Affects: forks importing the graph components
The AntV-G6 based knowledge graph is removed and replaced by an RDF-backed 3D Knowledge Graph tab with an Ontology mode and full-viewport expand.
Removed modules:
components/KnowledgeGraph/KnowledgeGraph.tsx
components/KnowledgeGraph/KnowledgeGraph.constants.ts
components/KnowledgeGraph/KnowledgeGraph.interface.ts
components/KnowledgeGraph/KnowledgeGraph.style.less
components/KnowledgeGraph/GraphElements/CustomNode.tsx
components/KnowledgeGraph/GraphElements/custom-node.less
components/OntologyExplorer/NodeContextMenu.tsx
New/replacement modules live under components/OntologyExplorer/ — OntologyEntityPanel.tsx, hooks/useOntologyExplorer.ts, hooks/useOntologyGraphDerived.ts, utils/graphBuilders.ts, utils/cardinalityLabelUtils.ts, utils/textMeasure.ts.
RDF must be enabled for the graph tab
The 3D graph reads from the RDF store. If rdf.enabled is false, the tab has no data. Note also that rdf.inferenceEnabled now defaults to false — see Applications & Automation.
OpenLineage¶
api/lineage/openlineage/openLineageFacets.json and configuration/openLineageSettings.json are both modified in 2.0 (additive fields). Snowflake gains an opt-in ACCESS_HISTORY lineage path, dbt Cloud gains column-level lineage from compiled SQL, dbt gains semantic-layer metric ingestion with column-level lineage, and Kafka Connect creates lineage for EventRouter/RegexRouter-routed topics.