Databricks上DBT工作流失败:SeedNode无depends_on属性
DBT工作流执行失败:'SeedNode' object has no attribute 'depends_on' 问题排查
问题背景
在Databricks环境执行DBT工作流时失败,执行命令:
dbt run --target workflow --project-dir dbt/projectdir/ --profiles-dir dbt/
使用的dbt版本为1.4.1,核心报错:
AttributeError: 'SeedNode' object has no attribute 'depends_on'
完整报错堆栈:
09:59:17 Traceback (most recent call last): File "/local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.9/site-packages/dbt/main.py", line 135, in main results, succeeded = handle_and_check(args) File "/local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.9/site-packages/dbt/main.py", line 198, in handle_and_check task, res = run_from_args(parsed) File "/local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.9/site-packages/dbt/main.py", line 245, in run_from_args results = task.run() File "/local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.9/site-packages/dbt/task/runnable.py", line 454, in run self._runtime_initialize() File "/local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.9/site-packages/dbt/task/runnable.py", line 165, in _runtime_initialize super()._runtime_initialize() File "/local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.9/site-packages/dbt/task/runnable.py", line 94, in _runtime_initialize self.load_manifest() File "/local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.9/site-packages/dbt/task/runnable.py", line 81, in load_manifest self.manifest = ManifestLoader.get_full_manifest(self.config) File "/local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.9/site-packages/dbt/parser/manifest.py", line 203, in get_full_manifest manifest = loader.load() File "/local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.9/site-packages/dbt/parser/manifest.py", line 339, in load self.parse_project( File "/local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.9/site-packages/dbt/parser/manifest.py", line 467, in parse_project parser.parse_file(block) File "/local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.9/site-packages/dbt/parser/base.py", line 425, in parse_file self.parse_node(file_block) File "/local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.9/site-packages/dbt/parser/base.py", line 386, in parse_node self.render_update(node, config) File "/local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.9/site-packages/dbt/parser/base.py", line 363, in render_update self.update_parsed_node_config(node, config, context=context) File "/local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.9/site-packages/dbt/parser/base.py", line 336, in update_parsed_node_config get_rendered(hook.sql, context, parsed_node, capture_macros=True) File "/local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.9/site-packages/dbt/clients/jinja.py", line 590, in get_rendered return render_template(template, ctx, node) File "/local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.9/site-packages/dbt/clients/jinja.py", line 545, in render_template return template.render(ctx) File "/local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.9/site-packages/jinja2/environment.py", line 1301, in render self.environment.handle_exception() File "/local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.9/site-packages/jinja2/environment.py", line 936, in handle_exception raise rewrite_traceback_stack(source=source) File "", line 1, in top-level template code File "/local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.9/site-packages/jinja2/sandbox.py", line 393, in call return __context.call(__obj, *args, **kwargs) File "/local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.9/site-packages/dbt/clients/jinja.py", line 328, in __call__ with self.track_call(): File "/usr/lib/python3.9/contextlib.py", line 117, in __enter__ return next(self.gen) File "/local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.9/site-packages/dbt/clients/jinja.py", line 319, in track_call self.node.depends_on.add_macro(unique_id) AttributeError: 'SeedNode' object has no attribute 'depends_on'
故障原因分析
- dbt 1.4.1版本存在设计缺陷:
SeedNode对象未实现depends_on属性,但当项目中自定义宏或全局钩子(如on-run-start/on-run-end)被seed节点调用时,dbt的宏调用追踪逻辑会尝试访问该属性,触发错误。 - 适配器版本不兼容:若使用的dbt-databricks适配器版本与dbt-core 1.4.1不匹配,可能会破坏节点的属性结构,导致该异常。
修复建议
- 升级dbt版本:dbt 1.4.x后续小版本(如1.4.7及以上)或1.5+主版本已修复该问题,升级dbt-core和dbt-databricks到兼容的稳定版本。执行命令:
pip install --upgrade dbt-core~=1.4.7 dbt-databricks~=1.4.0 - 排查自定义宏/钩子:若无法升级版本,检查项目中的全局钩子和自定义宏,暂时注释掉被seed节点调用的宏逻辑,或调整宏的适用范围,避免在seed节点上下文触发依赖追踪。
- 验证适配器兼容性:确认dbt-databricks版本与dbt-core 1.4.1匹配,卸载不兼容版本后重装对应版本。
- 清理缓存:执行
dbt clean清理本地manifest缓存,再重新运行工作流,避免旧缓存导致的异常。
内容的提问来源于stack exchange,提问作者jonasfh
相关产品推荐
相关产品推荐

