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

Cloud Composer集成DBT报错:找不到dbt_packages/dbt_utils的dbt_project.yml

解决Airflow中DbtRun/TestOperator因dbt_packages缺失导致的运行错误

问题背景

运行包含DbtRunOperator和DbtTestOperator的Airflow DAG时失败,报错提示找不到指定路径下的dbt依赖配置文件,尽管已在packages.yml中声明了依赖:

packages:
  - package: calogica/dbt_expectations
    version: [">=0.5.0", "<0.6.0"]
  - package: dbt-labs/dbt_utils
    version: 0.7.1

Airflow日志关键报错信息:

[2024-03-11, 11:28:17 UTC] {dbt_hook.py:130} INFO - Runtime Error
[2024-03-11, 11:28:17 UTC] {dbt_hook.py:130} INFO -   Failed to read package: Runtime Error
[2024-03-11, 11:28:17 UTC] {dbt_hook.py:130} INFO -     no dbt_project.yml found at expected path /home/airflow/gcs/dags/dbt_models/dbt_packages/dbt_utils/dbt_project.yml

核心原因

dbt依赖包未被拉取到指定路径——Airflow执行Dbt任务前,没有运行dbt deps命令安装packages.yml中声明的依赖,导致dbt_packages文件夹缺失或依赖文件不完整。

解决操作方案

方案1:在DAG中添加dbt deps前置任务

在DbtRunOperator和DbtTestOperator之前新增任务,先执行dbt deps拉取依赖,确保后续Dbt任务能找到完整的包文件。可以通过BashOperator或Python任务实现:

用BashOperator示例:

from airflow.operators.bash import BashOperator

dbt_deps_task = BashOperator(
    task_id='dbt_deps',
    bash_command='cd /home/airflow/gcs/dags/dbt_models && dbt deps',
    dag=dag
)

# 配置任务依赖顺序
dbt_deps_task >> dbt_run_task >> dbt_test_task

用PythonOperator示例:

from airflow.operators.python import PythonOperator
import subprocess

def pull_dbt_deps():
    subprocess.run(
        ['dbt', 'deps'],
        cwd='/home/airflow/gcs/dags/dbt_models',
        check=True
    )

dbt_deps_task = PythonOperator(
    task_id='dbt_deps',
    python_callable=pull_dbt_deps,
    dag=dag
)

dbt_deps_task >> dbt_run_task >> dbt_test_task

方案2:提前预安装依赖到代码库

在本地开发环境中,进入dbt项目根目录(即包含dbt_project.yml和packages.yml的dbt_models文件夹),执行:

dbt deps

执行完成后会生成dbt_packages文件夹,将该文件夹与dbt_models下的其他配置文件一起上传到GCS存储桶的/dags/dbt_models/路径下,确保Airflow能读取到完整的依赖包。

方案3:检查DbtOperator的路径配置

确认DbtRunOperator和DbtTestOperator的dir参数是否正确指向dbt项目根目录(包含dbt_project.yml的文件夹):

from airflow.providers.dbt.cloud.operators.dbt import DbtRunOperator

dbt_run_task = DbtRunOperator(
    task_id='dbt_run',
    dir='/home/airflow/gcs/dags/dbt_models',  # 确保路径准确
    dbt_bin='/usr/local/bin/dbt',  # 可选,若dbt不在系统默认PATH中需指定
    dag=dag
)

验证步骤

执行上述方案后,检查Airflow运行环境中的/home/airflow/gcs/dags/dbt_models/dbt_packages目录,确认dbt_utils和dbt_expectations文件夹存在,且每个文件夹内都包含dbt_project.yml文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 01:55:19