creating-dbt-models

dbt Model Development

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "creating-dbt-models" with this command: npx skills add altimateai/data-engineering-skills/altimateai-data-engineering-skills-creating-dbt-models

dbt Model Development

Read before you write. Build after you write. Verify your output.

Critical Rules

  • ALWAYS run dbt build after creating/modifying models - compile is NOT enough

  • ALWAYS verify output after build using dbt show

  • don't assume success

  • If build fails 3+ times, stop and reassess your entire approach

Workflow

  1. Understand the Task Requirements
  • What columns are needed? List them explicitly.

  • What is the grain of the table (one row per what)?

  • What calculations or aggregations are required?

  1. Discover Project Conventions

cat dbt_project.yml find models/ -name "*.sql" | head -20

Read 2-3 existing models to learn naming, config, and SQL patterns.

  1. Find Similar Models

Find models with similar purpose

find models/ -name "agg.sql" -o -name "fct_.sql" | head -5

Learn from existing models: join types, aggregation patterns, NULL handling.

  1. Check Upstream Data

Preview upstream data if needed

dbt show --select <upstream_model> --limit 10

  1. Write the Model

Follow discovered conventions. Match the required columns exactly.

  1. Compile (Syntax Check)

dbt compile --select <model_name>

  1. BUILD - MANDATORY

This step is REQUIRED. Do NOT skip it.

dbt build --select <model_name>

If build fails:

  • Read the error carefully

  • Fix the specific issue

  • Run build again

  • If fails 3+ times, step back and reassess approach

  1. Verify Output (CRITICAL)

Build success does NOT mean correct output.

Check the table was created and preview data

dbt show --select <model_name> --limit 10

Verify:

  • Column names match requirements exactly

  • Row count is reasonable

  • Data values look correct

  • No unexpected NULLs

  1. Verify Calculations Against Sample Data

For models with calculations, verify correctness manually:

Pick a specific row and verify calculation by hand

dbt show --inline " select * from {{ ref('model_name') }} where <primary_key> = '<known_value>' " --limit 1

Cross-check aggregations

dbt show --inline " select count(*), sum(<column>) from {{ ref('model_name') }} "

For example, if calculating total_revenue = quantity * price :

  • Pick one row from output

  • Look up the source quantity and price

  • Manually calculate: does it match?

  1. Re-review Against Requirements

Before declaring done, re-read the original request:

  • Did you implement what was asked, not what you assumed?

  • Are column names exactly as specified?

  • Is the calculation logic correct per the requirements?

  • Does the grain (one row per what?) match what was requested?

Anti-Patterns

  • Declaring done after compile without running build

  • Not verifying output data after build

  • Getting stuck in compile/build error loops

  • Assuming table exists just because model file exists

  • Writing SQL without checking existing model patterns first

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

developing-incremental-models

No summary provided by upstream source.

Repository SourceNeeds Review
General

documenting-dbt-models

No summary provided by upstream source.

Repository SourceNeeds Review
General

refactoring-dbt-models

No summary provided by upstream source.

Repository SourceNeeds Review
General

testing-dbt-models

No summary provided by upstream source.

Repository SourceNeeds Review