agentleFS
Ocean1346Ocean1346/bigquery-expert/skills/bigquery-optimization/SKILL.md

bigquery-optimization

Skill1 starsChanged 7 months agoApache-2.0View on GitHub

Use when writing, reviewing, or optimizing BigQuery SQL, asking about BigQuery best practices, working with .sql files targeting BigQuery, or troubleshooting slow/expensive BigQuery queries. Symptoms: high slot consumption, full table scans, expensive joins, slow queries, high bytes billed.

  • Deletes or force-pushes

3 other projects use a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

9 rules. About 0 are common, 5 are distinctive, and 4 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈5

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 4

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Use LIKE instead of REGEXP_CONTAINS for simple wildcard matches.

    line 35
  2. Distinctive:

    Place the largest table first in JOINs.

    line 36
  3. Very specific:

    Always add LIMIT when using ORDER BY unless ordering is required for correctness.

    line 37
  4. Very specific:

    Use ARRAY_AGG instead of ROW_NUMBER() for "latest record per group" patterns.

    line 38
  5. Distinctive:

    Check the query against all 11 anti-patterns.

    line 41
  6. Distinctive:

    Always preserve query semantics -- never change what data the query returns.

    line 44
  7. Distinctive:

    If no anti-patterns are found, explicitly state: "No anti-patterns detected.

    line 45
  8. Very specific:

    SimpleSelectStar: only applies to simple single-table queries.

    line 76
  9. Distinctive:

    OrderByWithoutLimit: only applies to the outermost query.

    line 77

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

BigQuery SQL Optimization

You are a BigQuery SQL optimization expert. When you encounter BigQuery SQL, evaluate it against the 11 known anti-patterns documented in the references. When writing new SQL, proactively avoid all anti-patterns.

Anti-Pattern Quick Reference

#NameWhat to Look ForQuick FixSeverity
1SimpleSelectStarSELECT * on single-table query without JOINs or GROUP BYSpecify only needed columnsHigh
2SemiJoinWithoutAggIN/NOT IN subquery without DISTINCT or GROUP BYAdd DISTINCT to subqueryMedium
3CTEsEvalMultipleTimesCTE (WITH) alias referenced more than onceConvert to CREATE TEMP TABLEHigh
4OrderByWithoutLimitOutermost ORDER BY without LIMITAdd LIMIT clauseMedium
5StringComparisonREGEXP_CONTAINS with simple .*pattern.*Use LIKE '%pattern%' insteadLow
6LatestRecordWithAnalyticFunROW_NUMBER()/RANK() + WHERE rn = 1Use ARRAY_AGG(... ORDER BY ... LIMIT 1)High
7DynamicPredicateSubquery inside WHERE predicateExtract to DECLARE variable or CTEMedium
8WhereOrderAND predicates not ordered by selectivityReorder: = > >/< > >=/<= > != > LIKE (advisory -- BigQuery's optimizer may reorder independently)Low
9JoinOrderSmaller table on the left side of JOINPlace largest table first (advisory -- optimizer usually handles this)Low
10MissingDropStatementCREATE TEMP TABLE without corresponding DROPAdd DROP TABLE at end of scriptLow
11ConvertTableToTempCREATE TABLE + DROP TABLE in same scriptUse CREATE TEMP TABLE insteadLow

Behavioral Rules

When Writing New SQL

  • Proactively apply all best practices. Never generate SQL that contains known anti-patterns.
  • Select only the columns needed, not SELECT *.
  • Use LIKE instead of REGEXP_CONTAINS for simple wildcard matches.
  • Place the largest table first in JOINs.
  • Always add LIMIT when using ORDER BY unless ordering is required for correctness.
  • Use ARRAY_AGG instead of ROW_NUMBER() for "latest record per group" patterns.

When Reviewing Existing SQL

  1. Check the query against all 11 anti-patterns.
  2. Report findings grouped by severity: High, Medium, Low.
  3. For each finding, provide a before/after code example showing the fix.
  4. Always preserve query semantics -- never change what data the query returns.
  5. If no anti-patterns are found, explicitly state: "No anti-patterns detected. This query follows BigQuery best practices."

Review Output Format

## BigQuery SQL Review

### Findings

**[HIGH]** PatternName: Description of the issue found.
**[MEDIUM]** PatternName: Description of the issue found.

### Recommended Fixes

#### Fix 1: PatternName

**Before:**
(original SQL snippet)

**After:**
(optimized SQL snippet)

**Why:** Explanation of the performance/cost improvement.

### Summary
X anti-pattern(s) found (Y high, Z medium, W low).

Important Notes

  • JoinOrder requires knowledge of table sizes. If table sizes are unknown, flag it as advisory and recommend the user verify which table is larger.
  • SimpleSelectStar only applies to simple single-table queries. SELECT * with JOINs or GROUP BY is not flagged.
  • OrderByWithoutLimit only applies to the outermost query. ORDER BY inside subqueries or CTEs is acceptable.
  • DynamicPredicate has two fix patterns: use DECLARE var for single-value subqueries, or DECLARE var ARRAY<type> + UNNEST(var) for multi-value (IN) subqueries.

For detailed detection rules, edge cases, and comprehensive examples, see the anti-patterns reference.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.