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

自定义宏调用存储过程后,如何根据返回结果使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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:45:39