bigquery-sql
BigQuery-specific SQL patterns: UNNEST for array expansion, STRUCT, ARRAY_AGG,…
Load when dbt run or dbt parse fails. Covers YML duplicate patches, ref errors, passthrough model warnings, current_date fixes, DuckDB error messages, and zero-row diagnosis.
$ npx -y skills add signalpilot-labs/signalpilot --skill dbt-debugging --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/dbt-debuggingContext preview
The summary Claude sees to decide when to auto-load this skill.
Load when dbt run or dbt parse fails. Covers YML duplicate patches, ref errors, passthrough model warnings, current_date fixes, DuckDB error messages, and zero-row diagnosis.
name: dbt-debugging description: "Load when dbt run or dbt parse fails. Covers YML duplicate patches, ref errors, passthrough model warnings, current_date fixes, DuckDB error messages, and zero-row diagnosis." type: skill
dbt fails with "Duplicate patch" when the same model appears in multiple YML files. Fix in ONE pass: 1. Glob `models/**/*.yml` to find all YML files 2. Keep the entry with the full contract (descriptions, refs, columns) — usually in a subdirectory YML 3. Remove the duplicate from `schema.yml` (which typically only has tests)
If `Compilation Error: node not found for ref()`:
{{ config(materialized='ephemeral') }}
select * from main.<name>NEVER create `.sql` files named after raw tables (e.g. `circuits.sql`, `results.sql`). This DESTROYS source data by replacing it with a materialized model. Fix: add `schema: main` to the source definition in YML instead.
If `dbt_project_map` warns about `current_date` usage: 1. Call `get_date_boundaries` — find the column marked "USE THIS" 2. Replace `current_date`/`now()` with `(SELECT MAX(<col>) FROM {{ ref('<table>') }})` 3. For package models: create `models/<name>.sql`, paste full SQL, replace current_date
If `dbt_project_map` warns about ROW_NUMBER/RANK: 1. Check if ORDER BY columns are unique within each partition 2. If not unique, append the primary key to ORDER BY 3. Re-run `dbt run --select <model>`
| Error | Fix | |-------|-----| | `invalid date field format` | `STRPTIME(col, '%d/%m/%Y')::DATE` | | `Table does not exist` | Check actual names with `describe_table` | | `column not found` | Check exact names — case matters in DuckDB | | `Cannot mix TIMESTAMP and INTEGER` | Cast both args to same type | | `No function matches DOUBLE / VARCHAR` | Add explicit `CAST()` | | `fivetran_utils is undefined` | Run `dbt deps` (only if `packages.yml` exists) |
Binary search: comment out WHERE clauses and JOINs one at a time to find which condition drops all rows. Most common cause: INNER JOIN where LEFT JOIN is needed.
1. Diagnose: `SELECT join_key, COUNT(*) FROM right_table GROUP BY 1 HAVING COUNT(*) > 1` 2. Fix A: pre-aggregate right table before joining 3. Fix B: `SELECT DISTINCT` (if valid for the grain) 4. Fix C: `ROW_NUMBER()` dedup pattern
Repo: signalpilot-labs/signalpilot
BigQuery-specific SQL patterns: UNNEST for array expansion, STRUCT, ARRAY_AGG,…
Populate the knowledge base from dbt project research. Proposes entries across all 6…
Load when task involves dbt snapshots, SCD Type 2, or tracking data changes over time. Covers…
Load when task involves adding, writing, or fixing dbt unit tests. Covers unit_tests YAML…
Load when task involves dbt model versioning, creating v2 of a model, or backward-compatible…
Load at Step 1 before exploring the project. Covers output shape inference, incremental model…