Grains
Lineage is recorded at two grains.- Table grain. A relation is produced from other relations.
- Column grain. A column is produced from other columns, tagged with how it was derived, such as a rename, a cast, an aggregate, or a join key.
Certainty
Every edge records how directly the flow was observed, from weakest to strongest:
A connection can never stamp an edge stronger than its access justifies. A connection that cannot read query history never produces a log observed edge. When you look at an edge, you can see the tier it earned.
Where it comes from
Lineage is populated by your connections on a refresh, not by the agent as it edits. This keeps the graph independent of what the agent did last turn. Sources that cost nothing to read refresh on their own. A local DuckDB or SQLite file, or a dbt project, is read from files on disk, so Alkera re-reads it whenever it changes. A live warehouse is different. Even a structural query can spin up a billed warehouse, so Alkera never queries one on a schedule. Refreshing a warehouse’s lineage is something you trigger. The default is deliberate as Alkera will not spend money in your warehouse to keep a graph fresh unless you ask it to.Lineage and the knowledge base
Lineage graph nodes also live as schema cards in the knowledge base. Therefore, information learned while building your lineage such as table schemas is also captured in the knowledge base as catalog knowledge.Blast radius
Before a change like dropping a column, renaming one, changing its type, or dropping a table, the agent propagates the change through the column graph and classifies the result:- Breaking. A downstream consumer depends on what you are removing.
- Potentially breaking. A dependency exists but Alkera cannot prove it breaks.
- Non-breaking. Nothing downstream in the paths it checked depends on it.
Related
Agent & Tools
How the agent uses lineage before it changes anything.
Plugins & Connections
The tools that populate the graph.