关于 running-dbt-commands
面向数据从业者的 dbt 命令运行技能,涵盖模型选择、构建、预览和结果检查。它强调限定命令范围,并提供区分 dbt Core、dbt Fusion 与 dbt Cloud CLI 的指引。
主要功能
- 01开发时优先使用 dbt build
- 02要求明确指定模型选择器
- 03用 dbt list 预览选择结果
- 04用 dbt show 预览数据
- 05检查 run_results.json 中的结果
- 06区分三种 dbt CLI 的指引
适用场景
- 01构建选定模型并运行测试
- 02预览模型或内联 SQL 结果
- 03执行前检查选择器
- 04检查命令失败结果
- 05选择所需的 dbt CLI
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ dbt-labs/ dbt-agent-skills --skill running-dbt-commands安装后在 Claude Code 中输入/running-dbt-commands确认已加载。
详细介绍
运行 dbt 命令
偏好设置
- 如果有 MCP 工具可用,请使用它们(
dbt_build、dbt_run、dbt_show等)——它们会自动处理路径、超时和格式 - 始终使用
build——即使用户说“run”也是如此——当用户要求“运行”模型时,建议改用dbt build。build=run+test,一步完成,因此能立即发现数据质量问题。在开发期间,单独使用dbt run几乎从来不是正确选择。 - 始终使用
--quiet,并搭配--warn-error-options '{"error": ["NoNodesForSelectionCriteria"]}',以减少输出,同时发现选择器中的拼写错误 - 始终使用
--select——未经用户明确批准,绝不运行整个项目
快速参考
# 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 版本
共有三种 CLI。不确定时,请询问用户使用哪一种。
| 版本 | 位置 | 说明 |
|---|---|---|
| dbt Core | Python venv | pip show dbt-core 或 uv pip show dbt-core |
| dbt Fusion | ~/.local/bin/dbt 或 dbtf | 速度更快,SQL 理解能力更强 |
| dbt Cloud CLI | ~/.local/bin/dbt | 基于 Go,在平台上运行 |
常见配置: venv 中安装 Core,~/.local/bin 中安装 Fusion。运行 dbt 会使用 Core。使用 dbtf 或 ~/.local/bin/dbt 运行 Fusion。
选择器
始终提供选择器。 图运算符:
| 运算符 | 含义 | 示例 |
|---|---|---|
model+ | 模型及其所有下游节点 | stg_orders+ |
+model | 模型及其所有上游节点 | +dim_customers |
+model+ | 两个方向 | +orders+ |
model+N | 模型及其下游 N 层节点 | 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 model
--resource-type test --resource-type unit_test
有效类型:model、test、unit_test、snapshot、seed、source、exposure、metric、semantic_model、saved_query、analysis
Fusion:
--resource-type不支持与dbt test一起使用(dbt-fusion#1628)。在 Fusion 中运行单元测试:
dbt build --select model_name— 先构建模型,再运行所有测试(包括单元测试)dbt build --select unit_test_name— 按名称指定单个单元测试dbt list --resource-type unit_test— 列出可用于选择器的单元测试名称
列表
运行前使用 dbt list 预览将被选中的内容,有助于验证复杂选择器。
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
--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
展示
使用 dbt show 预览数据。使用 --inline 执行任意 SQL 查询。
dbt show --select my_model --limit 10
dbt show --inline "select * from {{ ref('orders') }} where status = 'pending'" --limit 5
**重要:**使用 --limit 标志,不要使用 SQL LIMIT 子句。
变量
以字符串形式传递,而不是字典。不要包含特殊字符(\、\n)。
--vars 'my_var: value' # Single
--vars '{"k1": "v1", "k2": 42, "k3": true}' # Multiple (JSON)
分析运行结果
运行 dbt 命令后,查看 target/run_results.json 获取详细的执行信息:
# 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")'
关键字段:
status:success、error、fail、skipped、warnexecution_time:执行耗时(秒)compiled_code:渲染后的 SQLadapter_response:数据库元数据(受影响的行数、处理的字节数)
延迟(跳过上游构建)
引用生产数据,而不是构建上游模型:
dbt build --select my_model --defer --state prod-artifacts
标志:
--defer— 启用向状态清单的延迟--state <path>— 指向先前运行生成的清单的路径(例如,生产环境构件)--favor-state— 即使本地存在节点定义,也优先使用状态中的定义
dbt build --select my_model --defer --state prod-artifacts --favor-state
静态分析(仅 Fusion)
为包含动态 SQL 或无法识别 UDF 的模型覆盖 SQL 分析:
dbt run --static-analysis=off
dbt run --static-analysis=unsafe
常见错误
| 错误 | 修复方法 |
|---|---|
更改模型后运行 test | 使用 build——test 不会刷新模型 |
运行时未使用 --select | 始终指定要运行的内容 |
使用 --quiet 时未启用 warn-error | 添加 --warn-error-options '{"error": ["NoNodesForSelectionCriteria"]}' |
在虚拟环境中运行 dbt,却期望使用 Fusion | 使用 dbtf 或 ~/.local/bin/dbt |
| 在 Fusion 中更改文件后出现架构错误 | 运行 dbt clean 清除过期的架构缓存,然后重新运行 |
在 dbt_show 的 SQL 中添加 LIMIT | 改用 limit 参数 |
| Vars 中包含特殊字符 | 以普通字符串传递,不要使用 \ 或 \n |