Running dbt Commands Preferences Use MCP tools if available ( dbt_build , dbt_run , dbt_show , etc.) - they handle paths, timeouts, and formatting automatically Use build instead of run or test - test doesn't refresh the model, so testing a model change requires build . build does a run and a test of each node (model, seed, snapshot) in the order of the DAG Always use --quiet with --warn-error-options '{"error": ["NoNodesForSelectionCriteria"]}' to reduce output while catching selector typos Always use --select - never run the entire project without explicit user approval Quick Reference
Standard command pattern
dbt build --select my_model --quiet --warn-error-options '{"error": ["NoNodesForSelectionCriteria"]}'
Preview model output
dbt show --select my_model --limit 10
Run inline SQL query
dbt show --inline "select * from {{ ref('orders') }}" --limit 5
With variables (JSON format for multiple)
dbt build --select my_model --vars '{"key": "value"}'
Full refresh for incremental models
dbt build --select my_model --full-refresh
List resources before running
dbt list --select my_model+ --resource-type model dbt CLI Flavors Three CLIs exist. Ask the user which one if unsure. Flavor Location Notes dbt Core Python venv pip show dbt-core or uv pip show dbt-core dbt Fusion ~/.local/bin/dbt or dbtf Faster and has stronger SQL comprehension dbt Cloud CLI ~/.local/bin/dbt Go-based, runs on platform Common setup: Core in venv + Fusion at ~/.local/bin . Running dbt uses Core. Use dbtf or ~/.local/bin/dbt for Fusion. Selectors Always provide a selector. Graph operators: Operator Meaning Example model+ Model and all downstream stg_orders+ +model Model and all upstream +dim_customers +model+ Both directions +orders+ model+N Model and N levels downstream stg_orders+1 --select my_model
Single model
--select staging.*
Path pattern
--select fqn:stg_
FQN pattern
--select model_a model_b
Union (space)
--select tag:x,config.mat:y
Intersection (comma)
--exclude my_model
Exclude from selection
Resource type filter: --resource-type model --resource-type test --resource-type unit_test Valid types: model , test , unit_test , snapshot , seed , source , exposure , metric , semantic_model , saved_query , analysis List Use dbt list to preview what will be selected before running. Helpful for validating complex selectors. dbt list --select my_model+
Preview selection
dbt list --select my_model+ --resource-type model
Only models
dbt list --output json
JSON output
dbt list --select my_model --output json --output-keys unique_id name resource_type config Available output keys for --output json : unique_id , name , resource_type , package_name , original_file_path , path , alias , description , columns , meta , tags , config , depends_on , patch_path , schema , database , relation_name , raw_code , compiled_code , language , docs , group , access , version , fqn , refs , sources , metrics Show Preview data with dbt show . Use --inline for arbitrary SQL queries. dbt show --select my_model --limit 10 dbt show --inline "select * from {{ ref('orders') }} where status = 'pending'" --limit 5 Important: Use --limit flag, not SQL LIMIT clause. Variables Pass as STRING, not dict. No special characters ( \ , \n ). --vars 'my_var: value'
Single
--vars '{"k1": "v1", "k2": 42, "k3": true}'
Multiple (JSON)
Analyzing Run Results After a dbt command, check target/run_results.json for detailed execution info:
Quick status check
cat target/run_results.json | jq '.results[] | {node: .unique_id, status: .status, time: .execution_time}'
Find failures
- cat
- target/run_results.json
- |
- jq
- '.results[] | select(.status != "success")'
- Key fields:
- status
-
- success, error, fail, skipped, warn
- execution_time
-
- seconds spent executing
- compiled_code
-
- rendered SQL
- adapter_response
- database metadata (rows affected, bytes processed)
Defer (Skip Upstream Builds)
Reference production data instead of building upstream models:
dbt build
--select
my_model
--defer
--state
prod-artifacts
Flags:
--defer
- enable deferral to state manifest
--state
- path to manifest from previous run (e.g., production artifacts) --favor-state - prefer node definitions from state even if they exist locally dbt build --select my_model --defer --state prod-artifacts --favor-state Static Analysis (Fusion Only) Override SQL analysis for models with dynamic SQL or unrecognized UDFs: dbt run --static-analysis = off dbt run --static-analysis = unsafe Common Mistakes Mistake Fix Using test after model change Use build - test doesn't refresh the model Running without --select Always specify what to run Using --quiet without warn-error Add --warn-error-options '{"error": ["NoNodesForSelectionCriteria"]}' Running dbt expecting Fusion when we are in a venv Use dbtf or ~/.local/bin/dbt Adding LIMIT to SQL in dbt_show Use limit parameter instead Vars with special characters Pass as simple string, no \ or \n