Search code examples
macrosjinja2dbt

Try catch in jinja dbt Macros


I am trying to achieve try catch functionality in jinja inside dbt macros. But it seems like jinja doesn't support it in macros. Any alternative way I can achieve the same thing?

{% macro example_macro() %}

  {% for item in my_list_of_dicts %}
    {% set delete_query %}
         -- some logic
    {% endset %}

    {% try %} --how to achieve this in dbt macros
    {{ run_query(delete_query) }}
           
    {% except %}
        SELECT 'Error executing delete query for' AS errormsg
    {% endtry %}

  {% endfor %}
{% endmacro %}


Solution

  • There's no way to use try/catch inside dbt macros. You can achieve a similar result using execute variable. Your snippet should look something like this:

    {% macro example_macro() %}
    
      {% for item in my_list_of_dicts %}
        {% set delete_query %}
          -- some logic
        {% endset %}
    
        {% set result = run_query(delete_query) %}
    
        {% if not execute %}
          SELECT 'Error executing delete query for {{ item.some_identifier }}' AS errormsg
        {% endif %}
    
      {% endfor %}
    
    {% endmacro %}
    
    

    Keep in mind to replace item.some_identifier as it is just a placeholder for your actual column name.