Использование строки в качестве аргумента в макросе Jinja в dbt

Я хочу создать макрос dbt, чтобы упростить следующие строки

COALESCE(LOWER(tags::TEXT) ~ '.*my-first-query.*', FALSE),
COALESCE(LOWER(tags::TEXT) ~ '.*my-second-query.*', FALSE),
COALESCE(LOWER(tags::TEXT) ~ '.*my-other-query.*', FALSE)

Я хотел бы преобразовать вычисление в функцию, чтобы я мог преобразовать строки в

 {{ extract_clean_tag(my-first-query) }},
 {{ extract_clean_tag(my-second-query) }},
 {{ extract_clean_tag(my-other-query) }}

Как я могу записать этот макрос в dbt? У меня проблемы с передачей строк в качестве аргументов функциям.

Пока что пробовал что-то вроде

{% macro extract_clean_tag(tag_regex) %}

    COALESCE(LOWER(tags::TEXT) ~ '.*{{ tag_regex }}.*', FALSE)

{% endmacro %}

И позвонив через extract_clean_tag(my-first-query), но dbt возвращает:

column "my-first-query" does not exist

1 ответ

Решение

Вы должны вызвать его с аргументом my-first-query, например:

{{ extract_clean_tag('my-first-query') }}

Без кавычек парсер Jinja ищет переменную с именем my-first-query, тогда как кавычки означают, что вы передаете строку.

См. Также здесь: https://docs.getdbt.com/docs/building-a-dbt-project/jinja-macros/ (пример cents_to_dollars)

Другие вопросы по тегам