Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Designs robust ETL/ELT data pipelines covering ingestion, idempotency, schema evolution, orchestration, and data quality validation. Use this skill when the user asks to design, build, or review a data pipeline, ingest data from APIs/databases/files into a warehouse or lake, set up batch or streaming ETL/ELT, choose an orchestrator (Airflow, Dagster, Prefect, dbt), make a pipeline idempotent or backfill-safe, handle late-arriving or duplicate data, manage schema drift/evolution, add data quality
.claude/skills/jayrha-data-pipeline-architect/SKILL.md| Model | Eval pass | Runs |
|---|---|---|
| gemini-3.6-flash | 100% | 29 |
| gemini-3.1-pro-preview | 100% | 1 |
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 47% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 28% | 0% |
| case-06 | ✓→✓ | = Same ✓ | 59% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 48% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 58% | 0% |
This skill helps you design and review production-grade data pipelines. It covers the full lifecycle: ingestion, transformation, idempotency and backfills, schema evolution, orchestration, and data quality. It is opinionated toward modern ELT (load raw, transform in-warehouse) but supports classic ETL where it fits.
Keywords: ETL, ELT, data pipeline, ingestion, idempotency, backfill, schema evolution, schema drift, CDC, incremental load, watermark, orchestration, Airflow, Dagster, Prefect, dbt, data quality, freshness, dedup, late-arriving data, partitioning, medallion, bronze silver gold.
Use this skill to produce a concrete pipeline design (a design doc), to review an existing pipeline against best practices, or to generate skeleton DAGs/models and data-quality checks.
Default to ELT when the destination is a modern columnar warehouse/lake (Snowflake, BigQuery, Redshift, Databricks, DuckDB). Land raw data first, transform with SQL/dbt. Use ETL when: the destination can't transform cheaply, you must mask/drop PII before it lands (compliance), or you transform in-flight for a stream. See references/etl-vs-elt.md.
Follow these steps in order. Produce the design document in templates/pipeline-design.md as you go.
references/ingestion-patterns.md.references/idempotency.md: deterministic partition keys, MERGE/upsert on a stable business key, delete-insert by partition, or staging-then-atomic-swap. Never blind INSERT into a target on retry.updated_at, monotonic id, or LSN/CDC offset). Store the watermark in a state table, not in code. Re-read with overlap (lookback window) to catch late updates, then dedup. See references/ingestion-patterns.md.references/schema-evolution.md.references/orchestration.md.references/orchestration.md.references/data-quality.md.scripts/pipeline_lint.py against the design doc / config to catch missing idempotency keys, absent quality checks, no retry policy, and no schema-evolution policy._loaded_at, _source, and _batch_id for lineage and debugging.references/etl-vs-elt.md — decision matrix, batch vs streaming, when each wins.references/ingestion-patterns.md — full/incremental/CDC, watermarks, late-arriving data, dedup SQL.references/idempotency.md — MERGE, delete-insert, staging swap patterns with SQL.references/schema-evolution.md — formats, policies per layer, breaking-change handling.references/orchestration.md — tool comparison, DAG/retry/SLA patterns, medallion layering.references/data-quality.md — check taxonomy, where to place gates, dbt/Great Expectations examples.templates/pipeline-design.md — fill-in design document.examples/orders-pipeline.md — worked end-to-end example (Postgres → warehouse).scripts/pipeline_lint.py — lints a pipeline design config (YAML/JSON) for required safeguards.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-06 | pass→pass | 14,249 | 10,169 | -29% | 1 | 1 | 0% | 2,187 | 3,468 | +59% | 0 | 0 | — |
case-05 | fail→pass | 13,973 | 9,796 | -30% | 1 | 1 | 0% | 2,267 | 3,331 | +47% | 0 | 0 | — |
case-01 | fail→pass | 31,626 | 30,429 | -4% | 1 | 1 | 0% | 6,220 | 7,980 | +28% | 0 | 0 | — |
case-02 | pass→pass | 13,805 | 14,080 | +2% | 1 | 1 | 0% | 2,288 | 3,384 | +48% | 0 | 0 | — |
case-03 | pass→pass | 13,548 | 9,674 | -29% | 1 | 1 | 0% | 2,256 | 3,561 | +58% | 0 | 0 | — |
case-04 | pass→pass | 13,016 | 12,457 | -4% | 1 | 1 | 0% | 2,608 | 4,073 | +56% | 0 | 0 | — |
case-07 | pass→pass | 13,739 | 13,155 | -4% | 1 | 1 | 0% | 2,429 | 3,915 | +61% | 0 | 0 | — |
case-08 | pass→pass | 14,511 | 12,919 | -11% | 1 | 1 | 0% | 2,343 | 4,086 | +74% | 0 | 0 | — |
case-09 | pass→pass | 16,073 | 17,148 | +7% | 1 | 1 | 0% | 2,856 | 4,725 | +65% | 0 | 0 | — |
case-10 | pass→pass | 17,041 | 18,580 | +9% | 1 | 1 | 0% | 2,594 | 5,043 | +94% | 0 | 0 | — |
case-11 | pass→pass | 11,452 | 11,446 | -0% | 1 | 1 | 0% | 1,839 | 3,667 | +99% | 0 | 0 | — |
case-12 | pass→pass | 16,064 | 14,698 | -9% | 1 | 1 | 0% | 2,537 | 4,061 | +60% | 0 | 0 | — |
case-13 | pass→pass | 15,759 | 10,805 | -31% | 1 | 1 | 0% | 2,798 | 3,652 | +31% | 0 | 0 | — |
case-14 | pass→pass | 15,275 | 12,158 | -20% | 1 | 1 | 0% | 2,625 | 3,898 | +48% | 0 | 0 | — |
case-15 | pass→pass | 13,401 | 13,515 | +1% | 1 | 1 | 0% | 2,161 | 4,041 | +87% | 0 | 0 | — |
case-16 | pass→pass | 16,142 | 14,713 | -9% | 1 | 1 | 0% | 2,902 | 4,524 | +56% | 0 | 0 | — |
case-17 | pass→pass | 16,686 | 12,201 | -27% | 1 | 1 | 0% | 2,787 | 3,752 | +35% | 0 | 0 | — |
case-18 | pass→pass | 11,188 | 9,151 | -18% | 1 | 1 | 0% | 1,915 | 3,390 | +77% | 0 | 0 | — |
case-19 | pass→pass | 14,609 | 9,836 | -33% | 1 | 1 | 0% | 2,420 | 3,386 | +40% | 0 | 0 | — |
case-20 | pass→pass | 20,325 | 15,569 | -23% | 1 | 1 | 0% | 3,521 | 4,547 | +29% | 0 | 0 | — |
case-21 | pass→pass | 16,487 | 14,594 | -11% | 1 | 1 | 0% | 2,813 | 4,137 | +47% | 0 | 0 | — |
case-22 | pass→pass | 13,092 | 9,664 | -26% | 1 | 1 | 0% | 2,586 | 3,935 | +52% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +9 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.