Lineage Examples
Four situations teams actually hit, each with the graph it produces. Pick a tab.
Getting a first graph out of a Snowflake account nobody documented
Context. A data platform team inherited a Snowflake account with a few hundred tables and views and no data catalog. They know roughly which tables feed the reporting layer, but nothing is written down and the person who built it left. The datastore is registered and synced, so the tables are containers, and every Lineage tab is empty.
What happens. They run a Sync with Collect lineage turned on. Qualytics reads the account's recorded query history, parses the statement text of the queries the history holds, and reads the view definitions. Most reporting tables come back with a full upstream chain in one run.
flowchart LR
EXT["SALES.PUBLIC.ORDERS_STAGING"]
RAW["raw_orders"]
CLEAN["orders_clean"]
REV["daily_revenue"]
EXT -.-> RAW
RAW --> CLEAN
CLEAN --> REV
The dashed node is the interesting part. ORDERS_STAGING lives in a database nobody registered in Qualytics, so it is drawn as a reference under the name Snowflake spells it with, and the relationship is kept because the other end resolved to a container.
Why it works. Collection answers from what the warehouse actually did, not from what someone remembered to document, so it is the fastest way to a graph that reflects reality. The dashed nodes are a result rather than a defect: they name exactly which assets are part of the pipeline and outside quality coverage. Registering that database and collecting again turns ORDERS_STAGING into an ordinary node, and the chain joins up without the connection being drawn twice.
Keeping bronze, silver, and gold connected when each lives in its own datastore
Context. A team materializes the same logical entity at three stages, and each stage is a separate Qualytics datastore: the raw zone, the curated zone, and the serving zone. Their Atlan instance already knows the whole chain, because the orchestrator publishes it.
What happens. They connect the Atlan integration and run a sync. Qualytics imports the relationships, tagging each connection with the data catalog's name, and the graph for the gold table walks back through silver to bronze across all three datastores.
flowchart LR
subgraph RAW["Raw datastore"]
B["customer_bronze"]
end
subgraph CUR["Curated datastore"]
S["customer_silver"]
end
subgraph SRV["Serving datastore"]
G["customer_gold"]
end
B --> S
S --> G
When the orchestrator later drops the silver stage and the data catalog stops publishing that relationship, the next Atlan sync removes it and the graph follows.
Why it works. The data catalog is the source of truth for what it publishes, so reconciling against it is safe: a relationship absent from the data catalog is genuinely absent. That is exactly why the same reconciliation would be wrong for collected lineage, where absence only means the window held no evidence.
Tracing a table in the enrichment datastore back to what it came from
Context. An analyst opens a table in an enrichment datastore whose name they do not recognize, and wants to know which table the rows came from before trusting anything in it.
What happens. The Lineage tab already has a connection, with nothing configured and no sync involved: the scan that wrote the table recorded it. Expanding the fields shows the field-level connections too.
flowchart LR
subgraph SRC["Source datastore"]
O["orders"]
OE["orders.email"]
end
subgraph ENR["Enrichment datastore"]
R["orders_remediation"]
RE["orders_remediation.email"]
end
O -->|written by a scan| R
OE -->|field level| RE
Why it works. Qualytics knows what it wrote, so this lineage is recorded at the moment of the write rather than derived afterwards. It is also kept rather than reconciled: the rows did flow, and that stays true after a later run stops targeting the same table, which is what lets the analyst trust a connection to a table nobody is writing any more.
Recording a step that happens outside the datastore
Context. A nightly job exports a table to object storage, transforms it with a tool outside the warehouse, and loads the result back. Both tables are in the same Snowflake datastore, and collection connects neither to the other: no statement in the warehouse ever read one to write the other, so there is nothing to observe.
flowchart LR
E["orders_export"]
T["Transformation<br/>outside the warehouse"]
L["orders_enriched"]
E -.-> T
T -.-> L
E ==>|manual connection| L
What happens. A Manager opens the downstream table's Lineage tab and adds the upstream connection by hand. It carries the manual badge and is never touched by a later collection, a data catalog sync, or a computed container update.
Why it works. Every automatic source answers from evidence it can reach, and this hop leaves none in any of them. Manual connections exist for exactly that: knowledge that is real but lives outside every system Qualytics can read. Because nothing else produces it, nothing else removes it either, which is both the point and the cost: if the pipeline changes, only a person will correct it.
See Also
-
Best Practices
Which source to lean on, how to run collection, and how to keep a graph you can trust.
-
Permissions
The add-on gate, what each role can do, and why a deleted connection can come back.
-
How It Works
The connection model, the two levels of granularity, the rules a connection has to obey, and how to find the containers that have one.
-
Lineage Sources
The four categories a connection can come from, and how each is created, updated, and removed.
-
Reading the Graph
Direction, nodes, assets outside Qualytics, where a connection came from, and expanding the graph.
-
Field-level Lineage
Expanding field lists, field metadata, and the focal field workflow.