Cloud Composer运行dbt时name字段jaffle_shop正则匹配错误求解
问题排查与解决方案
根因定位
报错是dbt在校验dbt_project.yml的name字段时触发的规则校验失败,正则规则^[^\d\W]\w*$要求项目名首字符必须为字母,后续字符仅支持字母、数字、下划线。jaffle_shop本身完全符合规则,报错属于异常校验触发,可按以下步骤排查:
排查步骤
1. 检查dbt_project.yml文件的隐藏问题
- 打开你上传到GCS的
dags/dbt_project.yml文件,检查name字段:- 确认字段前没有不可见字符、全角空格、零宽空格、多余缩进
- 确认字段值没有多余特殊符号,正确写法示例:
name: 'jaffle_shop' # 或无引号写法 name: jaffle_shop - 建议直接在Cloud Shell中重新创建最简测试用
dbt_project.yml替换现有文件,避免本地编辑产生的不可见字符问题
2. 修复jsonschema版本兼容问题
- 你额外安装的jsonschema 3.1版本存在兼容风险:dbt 0.21.0官方兼容的jsonschema版本范围为
>=3.0,<3.3,部分小版本会存在正则解析逻辑差异 - 解决方法:在Cloud Composer的PyPI包配置中,将jsonschema版本锁定为
3.2.0,这是dbt 0.21.0实测稳定兼容的版本
3. 校验运行路径配置
- 确认BashOperator执行dbt命令时指定的工作目录正确,避免dbt误读其他路径下的
dbt_project.yml,BashOperator写法参考:dbt_run_task = BashOperator( task_id="dbt_run", bash_command="cd /home/airflow/gcs/dags && dbt run", dag=dag ) - 可在Bash命令开头添加
cat dbt_project.yml打印运行时读取的配置内容,确认实际读取的文件内容符合预期
4. 移除airflow-dbt包依赖冲突
- airflow-dbt 0.4.0未做dbt 0.21.0的兼容适配,如果你仅使用原生BashOperator执行dbt命令,可先卸载airflow-dbt包,避免依赖冲突覆盖dbt原生的校验逻辑
临时验证方案
如果上述排查完成后仍报错,可临时将dbt_project.yml的name值修改为无下划线的纯字母测试值(比如jaffleshop),先确认校验逻辑可正常通过,再逐步回退配置定位具体问题。
内容的提问来源于stack exchange,提问作者Pete
相关产品推荐
相关产品推荐

