Skip to main content
skill GitHub Copilot official · GitHub

bigquery-pipeline-audit — GitHub Copilot skill: pipeline safety checks

Skill audits Python + BigQuery scripts for cost leaks, idempotency, and production readiness. Catches uncontrolled loops, missing query cost limits, and unsafe writes—returns a structured report with exact line numbers.

Install into GitHub Copilot · Skills CLI (Vercel) All methods and platforms ↓
npx skills add github/awesome-copilot --skill bigquery-pipeline-audit
Open on GitHub

What bigquery-pipeline-audit does

The skill runs six critical checks on your code. First, it hunts cost exposure: scans all BigQuery and external API calls, calculates worst-case retry counts, and flags missing maximum_bytes_billed limits. It demands a dry_run mode with zero billing and explicit confirmation before production runs.

Next, it reviews loop patterns. If your script executes one query per date or entity, that's a red flag. The skill suggests rewriting to a single set-based query with GENERATE_DATE_ARRAY or chunked loops with hard caps. It checks partition filters (no function wrapping), rejects SELECT *, and warns about many-to-many joins and expensive operations before filtering.

The core concern is idempotent writes. The skill requires either MERGE on a deterministic key, a staging table scoped to the run, or deduplication via ROW_NUMBER(). Finally, it verifies observability: job IDs logged, bytes and slot milliseconds recorded, a run summary with run_id, env, mode, date range, and job counts. Returns PASS/FAIL per section with a patch list ordered by risk.

What it helps with

  • Prevent runaway BigQuery bills from uncontrolled loops in production
  • Rewrite row-by-row queries into batch operations and reduce job count from thousands to tens
  • Ensure reruns are safe and do not corrupt or duplicate data
  • Verify partition filters actually prune data and eliminate full table scans
  • Add cost and performance logging to every BigQuery job

Example prompts for the agent

  • Audit this pipeline for cost safety and production readiness
  • Find all idempotency problems in my BigQuery writes
  • Is it safe to run this script against prod data every day

How to install bigquery-pipeline-audit

1Skills CLI (Vercel)

npx skills add github/awesome-copilot --skill bigquery-pipeline-audit

2GitHub CLI

gh skill install github/awesome-copilot bigquery-pipeline-audit

3Manually: put the files in place

.github/skills/bigquery-pipeline-audit/SKILL.md

From the same set554

The whole set →
git-commit official github This skill reviews Git changes, stages related files, and creates Conventional Commits. Use it when you want an agent to make one commit or split work into separate commits. GitHub Copilot 47,165installs excalidraw-diagram-generator official github Turn a plain-language description into an Excalidraw diagram. Useful for mapping processes, system structure, and relationships between entities. GitHub Copilot 31,639installs multi-stage-dockerfile official github This skill guides GitHub Copilot in writing multi-stage Dockerfiles for different languages and frameworks. Use it when the final runtime image should contain fewer build dependencies. GitHub Copilot 29,688installs documentation-writer official github Skill that turns the agent into a technical writer following the Diátaxis framework: tutorials, how-to guides, reference, and explanation. Proposes structure before writing. GitHub Copilot 27,757installs prd official github Turns a feature idea into a structured PRD with user stories, technical requirements, and risks. Use it when planning a software feature or an AI-powered one. GitHub Copilot 24,035installs refactor official github This skill reshapes existing code without changing its external behavior. Use it for gradual cleanup of large functions, duplication, weak types, and code smells. GitHub Copilot 22,321installs java-springboot official github Gives GitHub Copilot Spring Boot development practices, from project layout to tests and security. Use it when writing or reviewing Java application code. GitHub Copilot 21,272installs create-readme official github This skill reviews a project and creates a structured README.md. Use it when the repository needs clear documentation based on its actual files and code. GitHub Copilot 19,081installs

Similar

error-handling-patterns Seth Hobson This skill covers exceptions, Result types, error propagation, and graceful degradation. Use it when designing APIs or debugging failures. Claude Code CX Codex Cursor 22,957installs python-design-patterns Seth Hobson Use it to shape Python components, separate responsibilities, and decide when repeated code deserves an abstraction. It fits design and refactoring work. Claude Code CX Codex Cursor 22,842installs improve-codebase-architecture Matt Pocock This skill scans a codebase for architectural friction, then builds a visual HTML report with refactoring candidates. Use it before a deeper architecture review. Claude Code 1,163,035installs tdd Matt Pocock Guides the red-green TDD loop: ensures tests are written first, keep them at public interfaces, and avoid coupling to implementation details. Claude Code 1,141,062installs triage Matt Pocock This skill moves issues and external PRs through triage states, verification, and agent briefs. It fits maintainers managing an issue queue. Claude Code 990,453installs codebase-design Matt Pocock This skill helps design modules with small interfaces and hidden complexity. Use it when refactoring code, choosing a seam, or making tests easier to write. Claude Code 850,344installs code-review Matt Pocock Reviews changes from a chosen reference point against repository standards and the originating spec. Use it for a branch, PR, or work in progress. Claude Code 789,521installs implement Matt Pocock Implements work from a specification or tickets, following a test-driven flow and ending with review and a commit. Use it when a coding task needs a defined delivery routine. Claude Code 774,700installs

Questions about bigquery-pipeline-audit

How do I install bigquery-pipeline-audit in GitHub Copilot?

Run npx skills add github/awesome-copilot --skill bigquery-pipeline-audit, then gh skill install github/awesome-copilot bigquery-pipeline-audit. Or add the SKILL.md file from .github/skills/bigquery-pipeline-audit/ to your repository.

What does bigquery-pipeline-audit check?

It analyzes Python code with BigQuery calls across six categories: cost exposure in loops and retries, missing maximum_bytes_billed limits, unsafe dry-run and execute modes, row-by-row backfill patterns, partition filter correctness, write idempotency, and observability gaps. Returns a PASS/FAIL verdict with exact patch suggestions.

What idempotency key should I use for my MERGE statements?

Typically a combination like entity_id + date + model_version or your own business logic key. The skill will examine your code and recommend the right key. Crucially: store run_id as metadata, not as part of your uniqueness key, unless you explicitly need multi-run history.

Source text

SKILL.md · MIT
---
name: bigquery-pipeline-audit
description: 'Audits Python + BigQuery pipelines for cost safety, idempotency, and production readiness. Returns a structured report with exact patch locations.'
---

# BigQuery Pipeline Audit: Cost, Safety and Production Readiness

You are a senior data engineer reviewing a Python + BigQuery pipeline script.
Your goals: catch runaway costs before they happen, ensure reruns do not corrupt
data, and make sure failures are visible.

Analyze the codebase and respond in the structure below (A to F + Final).
Reference exact function names and line locations. Suggest minimal fixes, not
rewrites.

---

## A) COST EXPOSURE: What will actually get billed?

Locate every BigQuery job trigger (`client.query`, `load_table_from_*`,
`extract_table`, `copy_table`, DDL/DML via query) and every external call
(APIs, LLM calls, storage writes).

For each, answer:
- Is this inside a loop, retry block, or async gather?
- What is the realistic worst-case call count?
- For each `client.query`, is `QueryJobConfig.maximum_bytes_billed` set?
  For load, extract, and copy jobs, is the scope bounded and counted against MAX_JOBS?
- Is the same SQL and params being executed more than once in a single run?
  Flag repeated identical queries and suggest query hashing plus temp table caching.

**Flag immediately if:**
- Any BQ query runs once per date or once per entity in a loop
- Worst-case BQ job count exceeds 20
- `maximum_bytes_billed` is missing on any `client.query` call

---

## B) DRY RUN AND EXECUTION MODES

Verify a `--mode` flag exists with at least `dry_run` and `execute` options.

- `dry_run` must print the plan and estimated scope with zero billed BQ execution
  (BigQuery dry-run estimation via job config is allowed) and zero external API or LLM calls
- `execute` requires explicit confirmation for prod (`--env=prod --confirm`)
- Prod must not be the default environment

If missing, propose a minimal `argparse` patch with safe defaults.

---

## C) BACKFILL AND LOOP DESIGN

**Hard fail if:** the script runs one BQ query per date or per entity in a loop.

Check that date-range backfills use one of:
1. A single set-based query with `GENERATE_DATE_ARRAY`
2. A staging table loaded with all dates then one join query
3. Explicit chunks with a hard `MAX_CHUNKS` cap

Also check:
- Is the date range bounded by default (suggest 14 days max without `--override`)?
- If the script crashes mid-run, is it safe to re-run without double-writing?
- For backdated simulations, verify data is read from time-consistent snapshots
  (`FOR SYSTEM_TIME AS OF`, partitioned as-of tables, or dated snapshot tables).
  Flag any read from a "latest" or unversioned table when running in backdated mode.

Suggest a concrete rewrite if the current approach is row-by-row.

---

## D) QUERY SAFETY AND SCAN SIZE

For each query, check:
- **Partition filter** is on the raw column, not `DATE(ts)`, `CAST(...)`, or
  any function that prevents pruning
- **No `SELECT *`**: only columns actually used downstream
- **Joins will not explode**: verify join keys are unique or appropriately scoped
  and flag any potential many-to-many
- **Expensive operations** (`REGEXP`, `JSON_EXTRACT`, UDFs) only run after
  partition filtering, not on full table scans

Provide a specific SQL fix for any query that fails these checks.

---

## E) SAFE WRITES AND IDEMPOTENCY

Identify every write operation. Flag plain `INSERT`/append with no dedup logic.

Each write should use one of:
1. `MERGE` on a deterministic key (e.g., `entity_id + date + model_version`)
2. Write to a staging table scoped to the run, then swap or merge into final
3. Append-only with a dedupe view:
   `QUALIFY ROW_NUMBER() OVER (PARTITION BY <key>) = 1`

Also check:
- Will a re-run create duplicate rows?
- Is the write disposition (`WRITE_TRUNCATE` vs `WRITE_APPEND`) intentional
  and documented?
- Is `run_id` being used as part of the merge or dedupe key? If so, flag it.
  `run_id` should be stored as a metadata column, not as part of the uniqueness
  key, unless you explicitly want multi-run history.

State the recommended approach and the exact dedup key for this codebase.

---

## F) OBSERVABILITY: Can you debug a failure?

Verify:
- Failures raise exceptions and abort with no silent `except: pass` or warn-only
- Each BQ job logs: job ID, bytes processed or billed when available,
  slot milliseconds, and duration
- A run summary is logged or written at the end containing:
  `run_id, env, mode, date_range, tables written, total BQ jobs, total bytes`
- `run_id` is present and consistent across all log lines

If `run_id` is missing, propose a one-line fix:
`run_id = run_id or datetime.utcnow().strftime('%Y%m%dT%H%M%S')`

---

## Final

**1. PASS / FAIL** with specific reasons per section (A to F).
**2. Patch list** ordered by risk, referencing exact functions to change.
**3. If FAIL: Top 3 cost risks** with a rough worst-case estimate
(e.g., "loop over 90 dates x 3 retries = 270 BQ jobs").

© github · MIT · github/awesome-copilot

See also

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor