Использование строки в качестве аргумента в макросе 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)