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

使用dbt批量部署存储过程时宏代码报错‘list’未定义,如何修复?

解决dbt批量执行存储过程宏的编译错误

你的代码出现'list' is undefined错误,以及无法正确获取宏的问题,主要有两处关键问题需要修正,以下是修改后的完整代码及说明:

修改后的宏代码

{% macro run_all_procedure_macros() %}
    {# 初始化空列表存储要执行的宏名称 #}
    {% set procedures_to_run = [] %}
    
    {# 遍历所有宏,筛选出procedures目录下的宏 #}
    {% for macro in graph.macros.values() %}
        {% if macro.path.startswith('procedures/') %}
            {% do procedures_to_run.append(macro.name) %}
        {% endif %}
    {% endfor %}

    {# 打印要执行的宏并逐个调用执行 #}
    {% for proc_name in procedures_to_run %}
        {{ log('正在执行存储过程宏: ' ~ proc_name, info=True) }}
        {{ execute(proc_name) }}
    {% endfor %}
{% endmacro %}

关键修改点说明

  1. 列表初始化方式:Jinja2环境中不能直接使用Python的list()创建空列表,需改用[],这是导致编译错误的直接原因。
  2. 遍历对象修正:dbt的graph.nodes存储的是模型、快照、种子等数据对象,宏的元数据实际在graph.macros中,因此要切换遍历目标为graph.macros.values()。
  3. 添加宏执行逻辑:原代码仅打印宏名称,新增{{ execute(proc_name) }}来实际调用每个存储过程宏。
  4. 路径判断调整:若你的宏文件放在项目根目录的macros/procedures/下,宏的path属性会是procedures/[宏文件名],因此用startswith('procedures/')更准确,可根据实际目录结构自行调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:38:20