Как объединить кортежи из макросов в DBT

#sql #jinja2 #dbt

Вопрос:

Хотите объединить кортежи из разных макросов в один. Как и в следующем коде, цель состоит в том, чтобы объединить выходные данные

 {% macro days15() %}
    (1, 2, 3, 4, 5)                                                                                                                           
{% endmacro %}

{% macro days69() %}
    (6,7,8,9)
{% endmacro %}

{% macro days19() %}
    {{ days15() }} UNION ALL {{ days69() }}
{% endmacro %}
 

С ожиданиями, которые days19 возвращают кортеж с объединением значений days15 и days69 .

Ответ №1:

Я знаю, что не отвечаю прямо на ваш вопрос, но лучшим и более СУХИМ подходом для вашего «варианта использования» является создание 1 макроса с 2 параметрами, например:

 {% macro days(from, to) %}
    (
        {%- for i in range(from, to   1) -%}
        {{ i }}{{ ',' if not loop.last }}
        {%- endfor -%}
    )
{% endmacro %}
 

затем вы можете вызвать макрос с days(1, 5) помощью , days(6, 9) и days(1, 9)