如何从dbt项目加载资产?遇Dagster报错求助
解决Dagster加载dbt资产时"Could not find profile named dbtz"错误
问题根源
你调用load_assets_from_dbt_project时,profiles_dir参数传的是profiles.yml文件的路径,但这个参数要求传入的是包含profiles.yml的目录路径。dbt会在指定目录下寻找profiles.yml文件,直接传文件路径会导致dbt无法定位到正确配置,因此抛出找不到profile的错误。
修复步骤
修正profiles_dir参数
修改代码,将DBT_PROFILES指向profiles.yml所在的目录,而非文件本身:from dagster_dbt import load_assets_from_dbt_project from dagster._utils import file_relative_path DBT_PROJECT_PATH = file_relative_path(__file__, "../../dbtz") # 指向包含profiles.yml的config目录,不是文件路径 DBT_PROFILES_DIR = file_relative_path(__file__, "../../dbtz/config") dbt_assets = load_assets_from_dbt_project( project_dir=DBT_PROJECT_PATH, profiles_dir=DBT_PROFILES_DIR )验证路径有效性
可添加代码确认目录存在:import os assert os.path.exists(DBT_PROFILES_DIR), f"Profiles directory {DBT_PROFILES_DIR} does not exist"额外检查项
- 确认dbt项目根目录的
dbt_project.yml中,profile字段值为dbtz,与profiles.yml中的profile名称完全匹配:# dbt_project.yml中需包含 profile: "dbtz" - 替换
service_account.json的相对路径为绝对路径,避免Dagster运行环境与命令行工作目录不同导致的路径问题:keyfile: "/绝对路径/to/service_account.json"
- 确认dbt项目根目录的
命令行正常的原因
命令行执行dbt run时,dbt默认读取~/.dbt/profiles.yml,或者你可能通过--profiles-dir指定了正确目录,而Dagster中参数传错才出现不一致。
内容的提问来源于stack exchange,提问作者skulden
相关产品推荐
相关产品推荐

