Open source · Data & Analytics

Data Lineage Snapshotter

Capture table and field lineage from a versioned transformation manifest.

v0.1.0 · Node.js 22+ · MIT

Browse the public repository · View releases

A lineage graph is read as fact. Somebody asks "what breaks if I drop this column", reads the graph, sees nothing downstream, and drops it — so the one thing a lineage tool must never do is leave a gap where an edge should be. A missing edge does not read as "I could not tell"; it reads as "no dependency".

This walkthrough uses the tool's public README and checked-in example files. Run the command from a repository checkout with Node.js 22+.

Run the checked-in example

# A project whose lineage is fully derivable: no findings, exit 0
node bin/data-lineage-snapshotter.mjs --manifest examples/analytics/lineage.manifest.json

# SQL built at run time: an explicit unresolved edge, exit 2
node bin/data-lineage-snapshotter.mjs --manifest examples/partitioned/lineage.manifest.json

# A dependency cycle: complete evidence, failed check, exit 1
node bin/data-lineage-snapshotter.mjs --manifest examples/cyclic/lineage.manifest.json

# Write the graph document out as well
node bin/data-lineage-snapshotter.mjs \
  --manifest examples/analytics/lineage.manifest.json --out /tmp/lineage.json --json

Read the result

stdout always carries the JSON report and nothing else, so it pipes straight into a parser. The human summary goes to stderr, and --json suppresses it.

Scope

Size and count limits are enforced before the corresponding work, so a legal-sized input cannot exhaust memory. Every bound is tested from both sides: silent at exactly the limit, reported at one past it. The elapsed-time budget is checked cooperatively during work.