dbt run时如何排除Python测试文件?测试文件存放位置咨询
问题分析与解决方案
错误原因
dbt会将模型目录(如models/foo)下的所有.py文件视为Python模型进行解析。你的test_post_to_api.py是单元测试文件,没有定义dbt要求的Python模型结构(比如带@model装饰器的函数/类),因此触发了“每个Python文件必须定义一个模型”的解析错误。
解决方案
1. 推荐:将单元测试移至dbt专用测试目录
这是dbt项目的标准规范,能彻底解决问题:
- dbt默认使用
tests/目录存放各类测试(单元测试、数据测试等)。将test_post_to_api.py移动到tests/foo/目录下(与模型目录结构对应)。 - 这样
dbt run时只会扫描models/目录下的模型文件,不会处理tests/目录中的测试文件,自然避免解析错误。同时模型与测试分离,项目结构更清晰易维护。
2. 临时 workaround:通过路径匹配排除测试文件
如果暂时不想移动文件,可以通过路径通配符精确排除模型目录下的测试文件,执行命令:
dbt run --models foo --exclude path:models/foo/test_*.py
注意:这种方法只是在运行时排除文件,dbt仍会扫描到这些.py文件,存在潜在解析风险,长期建议使用第一种方案。
内容的提问来源于stack exchange,提问作者Vincent Claes
相关产品推荐
相关产品推荐

