自定义宏调用存储过程后,如何根据返回结果使dbt run失败?
解决方案
要在存储过程返回'Failure'时终止dbt run,你可以使用dbt内置的fail()函数主动触发模型执行失败,具体修改如下:
修改自定义宏代码
在捕获到存储过程返回值后,增加条件判断逻辑,当返回值为'Failure'时调用fail()抛出错误:
{% materialization call_proc, adapter='snowflake' -%} {% set query %} use schema "{{ database }}"."{{ schema }}" {% endset %} {% do run_query(query) %} {%- call statement('main',fetch_result=True) -%} {{ sql }} {%- endcall -%} {% if execute %} {%- set QRY_RSLT = load_result('main')['data'][0][0] -%} {{log (QRY_RSLT)}} -- 新增判断逻辑,返回Failure时触发失败 {% if QRY_RSLT == 'Failure' %} {{ fail('存储过程执行失败,已终止dbt run') }} {% endif %} {% endif %} {{ return({'relations': []}) }} {%- endmaterialization %}
原理说明
fail()是dbt提供的内置函数,调用该函数时,dbt会立即终止当前模型的执行,并将其标记为失败状态。- 默认情况下,dbt在单个模型失败后会停止后续所有模型的执行,满足你终止整个dbt run流程的需求。
内容的提问来源于stack exchange,提问作者Ankit Srivastava
相关产品推荐
相关产品推荐

