skills/data-lineage-tracker/SKILL.md
OpenLineage, DataHub, Marquez for data lineage tracking and impact analysis. Activate on: data lineage, OpenLineage, DataHub, Marquez, impact analysis, data catalog, column lineage, data discovery. NOT for: data quality validation (use data-quality-guardian), dbt documentation (use dbt-analytics-engineer).
npx skillsauth add curiositech/windags-skills data-lineage-trackerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Implement end-to-end data lineage tracking using OpenLineage, DataHub, and Marquez for impact analysis, debugging, and compliance.
Activate on: "data lineage", "OpenLineage", "DataHub", "Marquez", "impact analysis", "data catalog", "column lineage", "data discovery", "data provenance", "downstream impact"
NOT for: Data quality checks → data-quality-guardian | dbt model documentation → dbt-analytics-engineer | Schema evolution → schema-evolution-manager
| Domain | Technologies | |--------|-------------| | Lineage Standard | OpenLineage 1.x (open standard, LFAI) | | Catalogs | DataHub 0.14+, OpenMetadata 1.5+, Amundsen | | Lineage Backend | Marquez (OpenLineage reference), DataHub lineage | | Integrations | Airflow OpenLineage, Spark OpenLineage, dbt, Great Expectations | | Visualization | DataHub lineage graph, Marquez UI, dbt docs |
Airflow Task Spark Job dbt Model
│ │ │
├─ START event ──→ ├─ START event ──→ ├─ START event ──→
│ │ │
├─ RUNNING event ─→ ├─ RUNNING event ─→ │
│ │ │
├─ COMPLETE event ─→ ├─ COMPLETE event ─→ ├─ COMPLETE event ─→
│ (with I/O datasets) │ (with I/O datasets) │ (with I/O datasets)
↓ ↓ ↓
┌────────────────────────────────────┐
│ OpenLineage Backend │
│ (Marquez / DataHub / custom) │
│ │
│ Stores: job runs, datasets, │
│ input/output relationships, │
│ column-level lineage │
└────────────────────────────────────┘
# DataHub GraphQL: find all downstream dependencies of a dataset
query = """
{
dataset(urn: "urn:li:dataset:(urn:li:dataPlatform:snowflake,prod.fct_orders,PROD)") {
downstream: relationships(
input: { types: ["DownstreamOf"], direction: INCOMING, count: 50 }
) {
relationships {
entity {
urn
... on Dataset {
name
platform { name }
properties { description }
}
}
}
}
}
}
"""
# Result: all dashboards, models, and exports that depend on fct_orders
# Use this BEFORE making schema changes
Source Tables Transformation Target Table
───────────── ────────────── ────────────
raw_payments.amount ──→ SUM(amount) ──→ fct_revenue.total_revenue
raw_payments.currency ──→ exchange_rate_convert ──→ fct_revenue.total_revenue_usd
raw_orders.order_id ──→ JOIN key ──→ fct_revenue.order_id
raw_customers.name ──→ COALESCE(name, email) ──→ fct_revenue.customer_name
Column-level lineage answers:
"Where does fct_revenue.total_revenue_usd come from?"
→ raw_payments.amount + raw_payments.currency via exchange_rate_convert
data-ai
license: Apache-2.0 NOT for unrelated tasks outside this domain.
development
Use when designing caching strategies (cache-aside, write-through, write-behind), implementing distributed locks, building rate limiters, leaderboards, real-time streams (XADD/consumer groups), pub/sub, or tuning eviction policies. Triggers: thundering-herd on cache miss, dogpile on key expiry, Redlock vs SET-NX-PX choice, sliding-window rate limiter, hot-key on a single cluster slot, big-key blowup, MULTI/EXEC across slots, KEYS in production. NOT for Redis Cluster operations/admin (different domain), embedded KV (SQLite, leveldb), in-process LRU caches, or Memcached.
tools
Drawing the `'use client'` boundary correctly in React Server Components apps (Next.js App Router, RSC frameworks) — leaf-pushing, slot composition, serialization rules, and environment poisoning prevention. Grounded in react.dev and Next.js 16 docs.
development
Use when designing rate limiting for an API, choosing between token bucket / sliding window / leaky bucket / fixed window, implementing it in Redis, deciding edge (Cloudflare/Upstash) vs origin enforcement, sizing per-user vs per-IP vs per-endpoint quotas, returning the right 429 response with Retry-After, or fixing the boundary-burst bug in fixed-window limiters. Triggers: 429 too many requests, INCR + EXPIRE, ZADD + ZREMRANGEBYSCORE + ZCARD, X-RateLimit-Remaining header, Cloudflare WAF rate limiting rules, Upstash @upstash/ratelimit, leaky bucket shaping vs policing, distributed rate limiter consistency. NOT for DDoS mitigation specifically (different scale), CAPTCHA / bot management, full WAF design, or per-user quota billing.