From snowflake-skills
Adds schema tests (unique, not_null, relationships, accepted_values) to dbt models in schema.yml files. Matches existing YAML style for data quality validation, integrity checks, and debugging failures.
npx claudepluginhub altimateai/data-engineering-skills --plugin dbt-skillsThis skill uses the workspace's default tool permissions.
**Every model deserves at least one test. Primary keys need unique + not_null.**
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Generates original PNG/PDF visual art via design philosophy manifestos for posters, graphics, and static designs on user request.
Every model deserves at least one test. Primary keys need unique + not_null.
CRITICAL: Match the project's existing testing style before adding new tests.
# Find all schema.yml files with tests
find . -name "schema.yml" -exec grep -l "tests:" {} \;
# Read existing tests to learn patterns
cat models/staging/schema.yml | head -100
cat models/marts/schema.yml | head -100
# Check for custom tests or dbt packages
ls tests/
cat packages.yml 2>/dev/null
Extract from existing tests:
cat models/<path>/<model_name>.sql
Identify: primary keys, foreign keys, categorical columns, date columns, business-critical fields.
cat models/<path>/schema.yml | grep -A 50 "<model_name>"
# or
find . -name "schema.yml" -exec grep -l "<model_name>" {} \;
| Column Type | Recommended Tests |
|---|---|
| Primary key | unique, not_null |
| Foreign key | not_null, relationships |
| Categorical | accepted_values (ask user for valid values) |
| Required field | not_null |
| Date/timestamp | not_null |
| Boolean | accepted_values: [true, false] |
Match the existing style from step 1. Example format (adapt to project):
version: 2
models:
- name: model_name
description: "Brief description of what this model contains"
columns:
- name: primary_key_column
description: "Unique identifier for this record"
tests:
- unique
- not_null
- name: foreign_key_column
description: "Reference to related_model"
tests:
- not_null
- relationships:
to: ref('related_model')
field: related_key_column
- name: status
description: "Current status of the record"
tests:
- not_null
- accepted_values:
values: ['pending', 'active', 'completed', 'cancelled']
- name: created_at
description: "Timestamp when record was created"
tests:
- not_null
# Test specific model
dbt test --select <model_name>
# Test with upstream
dbt test --select +<model_name>
Common failures and fixes:
| Failure | Likely Cause | Fix |
|---|---|---|
unique fails | Duplicate records | Add deduplication in model |
not_null fails | NULL values in source | Add COALESCE or filter |
relationships fails | Orphan records | Add WHERE clause or fix upstream |
accepted_values fails | New/unexpected values | Update accepted values list |
tests:
- unique
- not_null
- accepted_values:
values: ['a', 'b', 'c']
- relationships:
to: ref('other_model')
field: id
tests:
- dbt_utils.expression_is_true:
expression: "amount >= 0"
- dbt_utils.recency:
datepart: day
field: created_at
interval: 1
Create tests/<test_name>.sql:
-- tests/assert_positive_revenue.sql
select *
from {{ ref('orders') }}
where revenue < 0