dbt 中无法识别宏

nag*_*ish 4 python etl dbt

{{ 
    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') }}")
        )
}}

select rd.news_id ,rd.title, rd.description, ns.sentiment from live_crawler_output_rss.rss_data rd 
left join 
live_crawler_output_rss.news_sentiment ns 
on rd.news_id = ns.data_id limit 10000;
Run Code Online (Sandbox Code Playgroud)

这是我在 DBT 中的模型,它配置了前置和后置挂钩,它们引用宏来插入和更新审计表。

我的宏

{ % 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 %}

Run Code Online (Sandbox Code Playgroud)

这是我第一次使用这个宏,我看到以下错误。

Compilation Error in model stg_news_sentiment_analysis_incr 
(models/staging/stg_news_sentiment_analysis_incr.sql)
'audit_tbl_insert' is undefined in macro run_hooks (macros/materializations/hooks.sql) 
called by macro materialization_table_default (macros/materializations/models/table/table.sql) called by model stg_news_sentiment_analysis_incr 
(models/staging/stg_news_sentiment_analysis_incr.sql). 
This can happen when calling a macro that does not exist. 
Check for typos and/or install package dependencies with "dbt deps".
Run Code Online (Sandbox Code Playgroud)

tco*_*eer 6

您的宏定义在定义 jinja 块的大括号中包含太多空格:

{ % macro audit_tbl_insert (model_id_no, model_name_txt) % }
Run Code Online (Sandbox Code Playgroud)

需要是

{% macro audit_tbl_insert (model_id_no, model_name_txt) %}
Run Code Online (Sandbox Code Playgroud)

然后这应该可以正常工作。