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
相关产品推荐
相关产品推荐

