Make lineage answer a specific change decision before deciding to capture every column. If finding affected reports and their owners is the main difficulty, reliable table-level dependencies plus manual registration may already help. If one wide table serves many purposes and irrelevant consumers repeatedly consume review effort, targeted column-level evidence may justify the investment. A connection in a graph does not establish correct metrics, complete data or discovery of every consumer.
Define the purchase around a change decision that can be completed
Data lineage records where data originates, how it is transformed and which outputs use it. The operational decision is usually narrower: which reports need retesting when a status code changes; who must migrate before an intermediate table is retired; or which released results require recalculation after a source-field correction. Define that question before choosing evidence at table, column, run or business-report level.
The W3C PROV overview connects entities, activities and participants involved in producing information to support assessments of trustworthiness.[1] It offers a way to express provenance, not automatic certification that data is true. This article recommends delivering data objects, transformations and responsible owners together. An image showing connected tables is often insufficient to hand over a change decision.
When one asset serves reports, model features, conversational analytics and file exports, informal inquiries can become slower. That is an engineering inference about dependencies and maintenance, not a statistic about industry adoption. For a small team with infrequent changes and known consumers, maintaining a manual inventory remains a viable option. Buying a platform should not be the predetermined conclusion.
The existing method for schema changes and versioned migration explains how to move producers and consumers safely. The additional question here is how to construct the consumer inventory before migration, establish which relationships are trustworthy and fund its maintenance. Lineage does not replace migration testing or authorize business definitions automatically.
Separate declared relationships, execution evidence and business use
OpenLineage 1.55.0 distinguishes a job, one execution of that job and a dataset, as well as runtime events and design-time metadata events.[2] Code declaring an order-table dependency and an observed production run reading that table provide different evidence. Both can be useful, but a declared relationship must not be presented as proof of an actual execution.
For each relationship, retain complete source and target identities, environment, granularity, capture method, code or definition version, observation time, last verification time and owner. Production and test objects with identical display names must remain distinct. Renames also require more than matching labels. An old relationship without a version or timestamp may guide investigation without justifying retirement of the current object.
Table-level lineage identifies the objects a process touches; column-level lineage distinguishes fields involved in its outputs. A field omitted from the result can still affect selection, joins or grouping. OpenLineage describes direct derivation and indirect influence, including filters that change the output population.[3] This supports testing condition fields; it does not establish that every collector detects them completely.
A denser graph can also be less accurate. OpenLineage’s job-lineage documentation describes explicit source-to-target relationships rather than mechanically connecting every input to every output of a job.[4] During acceptance, use a job that independently creates two summaries and check for false all-to-all connections. These specifications explain the mechanism here; they do not prescribe one representation or capture product.
Business use extends beyond generated datasets to shared spreadsheets, downloaded files and ad hoc analysis. dbt exposures can describe downstream dashboards and applications with dependencies and an owner. Its documentation distinguishes manual declarations from automatic generation for supported integrations.[5] Manual maintenance can therefore fill a boundary, but a declaration alone does not show that the consumer remains active.
Four consumers expose both missed impact and unnecessary review
Suppose an enterprise plans to change the status codes in an order table. Fix four consumers in an isolated example: A reports net revenue for fulfilled orders; B evaluates delivery using fulfillment status and promised dates; C counts all orders by creation date without using status; D is a weekly spreadsheet that filters downloaded orders by status. Assume no simultaneous permission or other field changes.
Business review and code inspection establish that A, B and D require retesting, while C’s calculation is unaffected by this field. The existing table graph discovers A, B and C because post-export processing in D is not captured. Treating all known table descendants as impact candidates produces three candidates, two relevant ones and one unnecessary review, while missing D. This evaluates the candidate list for the particular change; C’s dependency edge to the order table is not itself false.
Using independently established A, B and D as the denominator, the graph finds two of three relevant consumers. Using its generated list A, B and C as the denominator, two of three candidates are relevant. The equal fractions are coincidental. Calling the graph’s own three consumers the complete population would produce an unjustified claim of full coverage: the omitted D would never enter the denominator.
With column-level evidence, A’s filter and B’s status-dependent calculation must remain in scope, while C can leave the mandatory field-change test list. D requires export records, spreadsheet formulas and confirmation from its user, recorded as manual evidence with a review deadline. The resulting list A, B and D includes an owner, definition version and corresponding test for each. This demonstrates coverage within the controlled four-consumer example, not the absence of hidden production consumers.
Next, prepare old-code and new-code orders with equivalent business meaning. Check A’s net revenue, B’s delivery decisions and D’s selected order set against their expected results. If the business meaning of status also changes, owners must confirm new expectations instead of forcing equal numbers. Lineage identifies whom to test; correctness still depends on inputs, rules and reconciliation.
Choose among three paths by review burden and available evidence
The first path retains a manual inventory and enforces change registration. Each critical report records inputs, important fields, exports, ownership and confirmation dates, followed by review before changes. This suits a small asset estate, infrequent changes and reachable users. Its main costs are continuing coordination and staff handover. Departures and copied spreadsheets can quickly invalidate an inventory maintained only at launch.
The second path captures jobs and table relationships automatically, supplementing unobserved exits manually. It suits teams that first need overall dependency visibility, have relatively centralized processing and lack stable field detail. It can reduce discovery work, but a small change to a wide table may still trigger review of many consumers. Record failed capture, unsupported connections and identity conflicts; successful event counts are not a coverage measure.
The third path adds column-level relationships for frequently changed or consequential fields while retaining curated business uses. It requires actual query parsing, execution-plan evidence or another appropriate source, with understood limits for filters, joins, scripts and dynamic statements. Connector maintenance, parsing failures and mapping review add cost. Start with chains that repeatedly waste investigation effort instead of promising to trace every enterprise column at once.
Microsoft’s Power BI-to-Purview documentation lists source-specific column support and scenarios such as dynamic M parameters where lineage is not captured.[6] The page also describes retirement of the relevant governance capabilities, so it is used here as an example of connector limitations in existing environments, not a new procurement recommendation. Verify other platforms against their own versions rather than transplanting this support list.
If the main blind spot is offline use such as D, refining warehouse column detail may accomplish little; registering export purposes and owners is more direct. Conversely, when consumers are already known but every small field change requires contacting many unrelated reports, column-level scope reduction can save meaningful work. The decision concerns investment order, not an assumption that finer detail is always better.
Compare complete labor, not diagram-generation speed
Continue with an illustrative budget. All hours and rates are assumptions, not quotations or project results. At 12 changes per month, the current discovery and confirmation process takes six person-hours per change, or 72 hours. Suppose table-level capture reduces this to three hours per change plus 12 hours of monthly maintenance: 48 hours. Targeted column-level capture reduces it to 1.5 hours plus 24 maintenance hours: 42 hours. Every option must complete equivalent confirmation and acceptance scope.
Relative to the current process, table-level capture releases 24 hours monthly and column-level capture 30. Moving from table to column level, however, releases only six additional hours. At an internal accounting rate of 250 yuan per person-hour, that increment is worth 1,500 yuan monthly, without necessarily reducing cash expenditure. Assume initial table-level implementation takes 40 hours and the column upgrade another 80. Its incremental labor-only payback is 80 divided by six, approximately 13.3 months, excluding software, compute and upgrade costs.
Change frequency alters the result. With four changes monthly, manual work is 24 hours, table-level work is 4×3+12=24, and column-level work is 4×1.5+24=30. Greater detail increases routine effort. With 24 changes, the totals become 144, 84 and 60 hours. Column-level capture then releases 24 more hours than table-level capture, recovering its additional 80 implementation hours in about 3.3 months on labor alone. This assumes maintenance is independent of change frequency; verify that locally.
Do not assume all investigation disappears to improve the projected payback. People still confirm meanings, investigate unobserved use and run regressions; collection failures add effort. Record time spent discovering, interpreting, confirming, repairing the graph and retesting over actual changes, then revise the budget. Do not assign an arbitrary monetary benefit to unobserved future losses. Treat consequential omissions as a separate acceptance constraint.
If a high-consequence consumer cannot be accounted for, a favorable labor estimate does not justify automatic approval. Narrow the scope or defer it. Conversely, where a manual process supplies adequate evidence on time, a more elaborate graph may not justify upgrading. The evaluation must explain both work avoided and blind spots that remain.
Deliberately test missing relationships and misleading connections
The first failure is missing or stale lineage. In a test environment, add a report that filters by status and simulate collector failure. The expected outcome must expose collection delay or unknown coverage, not interpret the absent new edge as no new consumer. Check queries, capture batches, errors and graph versions; restore capture or add a verified manual record, then verify the path from both the field and report ends. Historical retention and current validity are separate properties.
The second failure is identity merging or overly broad relationships. Construct production and test order tables with the same name, plus a job independently generating customer and order summaries. The expected graph must neither merge environments nor imply that the customer source affects the order summary. Inspect complete identities and transformations, correct naming and mappings, and rerun impact analysis. Confirm both relevant inclusion and the removal of irrelevant mandatory tests.
A subtler boundary appears when the graph is unchanged but a status shifts meaning from shipped to received. The collector may faithfully record the same field while business results change. Inspect the semantic version and expected samples rather than continuing to tune the graph. Link lineage to contracts and test evidence; green nodes cannot remove the need for metric interpretation and business confirmation.
Acceptance should cover the views, scripts, dynamic parameters, exports and retired objects actually present, not only easy-to-parse SQL. List unsupported cases. Metadata can expose business structure and sensitive field names, so grant access by purpose rather than automatically providing all underlying records. Restricted evidence should remain restricted; copying source content merely to fill a graph is not an appropriate remedy.
Deliver a maintainable decision card from the pilot
Begin the card with purpose and boundaries: changed field, change type, production environment, affected period, permitted evidence and unobserved exits. Add an independent consumer inventory with A, B, C and D’s purposes, owners, fields and confirmation records. Construct it by cross-checking code, access evidence and business knowledge, rather than copying the lineage graph.
The second part records expected affected consumers, tool candidates, omissions, unnecessary candidates, last verification times and unsupported paths. Assign evidence collection and a deadline to each omission, and explain each exclusion. Retest the same examples before and after repair while retaining the earlier graph version, so the original decision remains explainable.
The final part assigns ongoing responsibility and budget: connector maintenance, offline-use confirmation, parsing-failure handling and approval of stale evidence. Record investigation hours per change, monthly maintenance, additional platform charges and exit criteria. Run several changes on one genuinely important chain before expanding, and require both coverage and labor evidence. Where evidence is insufficient, retain manual approval; a deployed graph is not proof that governance is complete.
References
- W3C: PROV-Overview (Working Group Note, 30 April 2013)
- OpenLineage: Object Model (1.55.0; accessed 2026-11-13)
- OpenLineage: Column Level Lineage Dataset Facet (1.55.0; accessed 2026-11-13)
- OpenLineage: Lineage Job Facet (1.55.0; accessed 2026-11-13)
- dbt: Add Exposures to your DAG (updated 2026-11-03; accessed 2026-11-13)
- Microsoft: Power BI lineage in Purview (updated 2026-11-12; accessed 2026-11-13)
