You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

dbt自定义通用测试is_positive未识别问题排查求助

解决dbt自定义通用测试未定义的编译错误

核心排查点与解决步骤

  1. 确认通用测试的宏命名规则
    通用测试本质是dbt宏,宏名就是你要在yaml中引用的测试名称,不需要额外加test_前缀。正确的宏代码示例:
-- tests/generic/is_positive.sql
{% test is_positive(model, column_name) %}
    select *
    from {{ model }}
    where {{ column_name }} <= 0
{% endtest %}

这里宏名直接写is_positive,dbt会自动识别为通用测试。

  1. 检查文件存放路径
    保持测试文件在tests/generic目录下即可,你的test-paths: ["tests"]配置是正确的——dbt会自动扫描tests/generic子目录加载通用测试,无需将文件移到tests根目录。

  2. 修正模型yaml的引用格式
    在模型配置文件中直接引用测试名称,不要加test_前缀,示例:

# 模型对应的yaml配置文件
models:
  - name: fct__monthly_revenue
    columns:
      - name: revenue
        tests:
          - is_positive
  1. 清除dbt缓存
    旧缓存可能导致配置无法生效,执行以下命令清除缓存后重新测试:
dbt clean
  1. 排查宏语法错误
    检查is_positive.sql中的模板语法是否正确,比如{% ... %}标签是否闭合、变量引用是否规范,语法错误会导致dbt无法加载宏,进而提示未定义。

验证步骤

完成调整后,先执行编译确认无错误:

dbt compile

再运行指定测试验证效果:

dbt test --select fct__monthly_revenue.revenue

内容的提问来源于stack exchange,提问作者audessy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 18:16:24