Как я могу использовать {{это}} в качестве параметра в макросе dbt jinja?

#jinja2 #dbt

Вопрос:

Как я могу передать имя текущей модели, используя {{this}} в качестве параметра для макроса в функции конфигурации?

Я попробовал несколько вариантов, и ни один из них не работает. модель/Таблица 1.sql

{{ конфигурация(post_hook= calculate_test(«{{это}}»))}}

макрос/calculate_test.sql

 {% macro calculate_test(tableN) %}
   
    {%- set tableName = tableN -%}

    {% set sql %}

        SELECT 
            COUNT(*) as cnt
        FROM {{ tableName }}

    {% endset %}

    {% set results = run_query(sql) %}

{% endmacro %}
 

Ошибка в том, что:
введите описание изображения здесь

Ответ №1:

Ты почти на месте! Единственное, что у вас есть лишние фигурные скобки и неуместные кавычки. Весь блок конфигурации-это Jinja, поэтому вам не нужны фигурные скобки вокруг «этого».

 {{ config(post_hook= “calculate_test(this)” ) }}
 

Комментарии:

1. Привет, спасибо за ответ! К сожалению, ни то, ни другое не сработало таким образом. Однако это сработало следующим образом: «{{calculate_test(это)}}»

2. приятно слышать. используется ли ваше использование внутри {{ config(...) }} блока, как вы указали в вопросе? потому что, если это не так, имеет смысл, почему у вас есть {{ имя макроса. возможно, стоит отредактировать ваш вопрос для будущих людей-это сложный аспект Дзиндзя для понимания!

3. да, макрос находится внутри config (), как в приведенном выше примере; однако без добавления скобок, когда я запускал модель, макрос не выполняется, поэтому я добавил их

4. странно! итак, у вас есть фигурные скобки вокруг конфигурации и фигурные скобки вокруг вашего оператора макрокоманды? я ожидал это увидеть, но, может быть, так оно и есть. Я проведу некоторое тестирование и обновлю свой ответ, хотя, похоже, вы правы.

5. действительно, у меня есть 2 набора фигурных скобок: {{ config( post_hook= «{{calculate_test(это)}}») }}