Retire a table safely
Every warehouse accumulates tables that look unused. Retiring one rests on a negative claim: nothing reads this. Lineage cannot prove that, because lineage is sound but not complete: an edge that exists is a real dependency, an absent edge tells you nothing. Usage logs cannot prove it either, because they record behaviour, not requirement. How do you retire tables without deleting one out from under a quarterly report?
You will end with a retirement process in which every deletion is preceded by a step that makes hidden use visible.
Work through these in order.
Work through it
Use lineage to narrow the candidates, never to clear them
Lineage answers "what breaks if I change this?": downstream traversal, ranked, reduces 3,000 edges to the assets that truly consume the table. It cannot answer "who still uses this?" An absent edge is not an absent dependency.
Rank the candidates by real reads
Query logs are a by-product the system produces anyway, so they are free and true: real usage, column-level access, who read what and when. Rank by them. They see only what ran through the logged engine.
Treat a quiet period as a guess, not proof
"Zero reads in 90 days" does not mean unused: quarterly reports, annual regulatory extracts and disaster-recovery paths are legitimately idle for longer than any threshold you would pick. Deprecation by telemetry has a false-positive rate set by the longest legitimate access interval, which you cannot observe. And the person who pays is not the person who set the threshold.
Make hidden use visible before you delete
Stop making absence claims from observation and create a channel everything must pass through: revoke access and log who is refused, stop serving the table and see who complains, or route reads through a proxy that must be used. That turns "I observed no usage" into "usage is now impossible without telling me". Keep the channel open long enough to cover the longest legitimate interval you know of.
Delete last
The reversible step (revoking, unserving) comes before the irreversible one. This is write-audit-publish applied to deletion: check, then commit.