Не вкладывайте фигурные скобки
Поэзия
Не вкладывайте фигурные скобки
Если dbt выдает ошибку рано
и ваш Jinja делает вас угрюмым
не пишите в Slack
просто сделайте шаг назад
и проверьте, не вкладываете ли вы свои фигурные скобки.
Jinja
При написании кода Jinja в проекте dbt может возникнуть соблазн вложить выражения друг в друга. Рассмотрим этот пример:
{{ dbt_utils.date_spine(
datepart="day",
start_date=[ ИСПОЛЬЗУЙТЕ JINJA ЗДЕСЬ ]
)
}}
Чтобы вложить выражение Jinja в другое выражение Jinja, просто поместите нужный код (без фигурных скобок) непосредственно в выражение.
Правильный пример
Здесь возвращаемое значение метода контекста var()
передается в качестве аргумента start_date
макросу date_spine
. Отлично!
{{ dbt_utils.date_spine(
datepart="day",
start_date=var('start_date')
)
}}
Неправильный пример
Этот код не работает в dbt >= v0.15.0. Как только мы обозначили, что находимся внутри выражения Jinja (используя синтаксис {{
), дальнейшие фигурные скобки внутри выражения Jinja не требуются. Этот код передаст буквальное строковое значение, "{{ var('start_date') }}"
, в качестве аргумента start_date
макросу date_spine
. Вероятно, это не то, что вы действительно хотите сделать!
-- Не делайте так! Это не сработает!
{{ dbt_utils.date_spine(
datepart="day",
start_date="{{ var('start_date') }}"
)
}}
Вот еще один пример:
{# Любой из этих вариантов работает #}
{% set query_sql = 'select * from ' ~ ref('my_model') %}
{% set query_sql %}
select * from {{ ref('my_model') }}
{% endset %}
{# Этот не работает #}
{% set query_sql = "select * from {{ ref('my_model')}}" %}
Исключение
Есть одно исключение из этого правила: вложенные фигурные скобки допустимы в хуках (например, on-run-start
, on-run-end
, pre-hook
и post-hook
).
Код, подобный этому, является как допустимым, так и рекомендуемым:
{{ config(post_hook="grant select on {{ this }} to role bi_role") }}