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

DBT模型引用audit_tbl_insert宏报错:宏未定义

解决DBT宏未定义的编译错误
  • 修复宏定义的语法错误
    你的宏代码开头的{ % macro存在多余空格,DBT无法识别这是合法的宏定义。将其修改为{% macro,同时注意字符串参数插入时需用单引号包裹,正确的宏代码如下:

    {% macro audit_tbl_insert (model_id_no, model_name_txt) %}
    
    {% set run_id_value = var('run_id') %}
    
    insert into {{audit_schema_name}}.{{audit_table_name}} (run_id, model_id, model_name, status, start_time, last_updated_at)
    values 
    ({{run_id_value}}::bigint,{{model_id_no}}::bigint,'{{model_name_txt}}','STARTED',current_timestamp,current_timestamp)
    
    {% endmacro %}
    
  • 确保宏文件存放在正确位置
    DBT只会自动加载项目根目录下macros文件夹中的宏文件,且文件后缀必须为.sql。请将包含audit_tbl_insert宏的文件移动到macros目录下(若没有该目录,手动创建即可)。

  • 修正Hook中的宏调用方式
    模型config配置里的宏调用不需要嵌套双大括号,直接传递宏调用即可,修改后的配置如下:

    {{ 
        config (
            pre_hook = before_begin(audit_tbl_insert(1,'stg_news_sentiment_analysis_incr')),
            post_hook = after_commit(audit_tbl_update(1,'stg_news_sentiment_analysis_incr','dbt_development','news_sentiment_analysis'))
            )
    }}
    
  • 确认依赖变量已定义
    宏中使用的audit_schema_name、audit_table_name和run_id变量,需要在项目的dbt_project.yml文件中定义,示例配置如下:

    vars:
      run_id: 12345  # 可根据实际运行逻辑动态传递
      audit_schema_name: "your_audit_schema"
      audit_table_name: "your_audit_table"
    
  • 验证宏加载状态
    运行dbt list --select macros命令,检查输出中是否包含audit_tbl_insert宏。若出现则说明宏已被正确加载,未出现则重新检查文件位置和语法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 13:30:12