dbt自定义通用测试is_positive未识别问题排查求助
解决dbt自定义通用测试未定义的编译错误
核心排查点与解决步骤
- 确认通用测试的宏命名规则
通用测试本质是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会自动识别为通用测试。
检查文件存放路径
保持测试文件在tests/generic目录下即可,你的test-paths: ["tests"]配置是正确的——dbt会自动扫描tests/generic子目录加载通用测试,无需将文件移到tests根目录。修正模型yaml的引用格式
在模型配置文件中直接引用测试名称,不要加test_前缀,示例:
# 模型对应的yaml配置文件 models: - name: fct__monthly_revenue columns: - name: revenue tests: - is_positive
- 清除dbt缓存
旧缓存可能导致配置无法生效,执行以下命令清除缓存后重新测试:
dbt clean
- 排查宏语法错误
检查is_positive.sql中的模板语法是否正确,比如{% ... %}标签是否闭合、变量引用是否规范,语法错误会导致dbt无法加载宏,进而提示未定义。
验证步骤
完成调整后,先执行编译确认无错误:
dbt compile
再运行指定测试验证效果:
dbt test --select fct__monthly_revenue.revenue
内容的提问来源于stack exchange,提问作者audessy
相关产品推荐
相关产品推荐

