dbt jinja возвращает результаты запроса - PullRequest
0 голосов
/ 07 августа 2020

Я пытаюсь смоделировать следующую ситуацию:

  • по некоторому запросу вернуть набор результатов с несколькими столбцами (например, run_query или db_utils.get_query_results_as_dict

  • итерация в case / statment

для exmaple:

{% set conditions = dbt_utils.get_query_results_as_dict("select comment, criteria from " 
~ ref('the_model') %}

...
select case
{% for condition in conditions %}
when {{ condition["criteria"] }}
then {{ condition["comment"] }}
{% endfor %}

Не удалось заставить это работать, любые рекомендации приветствуются .

Некоторые идеи, которые я пробовал:

  • get_column_values ​​x2 и заархивировать их в новый список кортежей. zip not recognised
  • получить счетчик (*) из the_model затем попытался перебрать диапазон - возникли проблемы с типами
  • различными for условиями {% for k, v in conditions.items() %}

1 Ответ

0 голосов
/ 07 августа 2020

Смогл самостоятельно разрешиться с помощью следующего:

{% set conditions = dbt_utils.get_query_results_as_dict("select criteria, comment from " ~ ref('reference_data') ~ " order by sequence desc") %}

with main as (
    select * from {{ ref('my_other_model') }}
),

-- [NEEDS_REVIEW] there's probably a cleaner way to do this iteration - however it's interpolated result. Could do with the zip function.
comments as (
    select
        *,
        case
            {# {{- log(conditions, info=True) -}} #}
            {%- for comment in conditions.COMMENT -%}
            when {{ conditions.CRITERIA[loop.index0] }}
            then '{{ comment }}'
            {% endfor %}
        end as comment

        from main
)

select * from comments

Попадания:

  • это было на снежинке, поэтому ключи, возвращаемые функцией, будут смещены поскольку именно так я загрузил данные.
  • Использование loop.index0 для получения текущей итерации l oop и индексации в другой набор кортежей (в данном случае CRITERIA).
  • Я добавил ключ SEQUENCE к своим справочным данным, чтобы обеспечить согласованный рендеринг, используя его для заказа. Критерии немного пересекаются, поэтому это было важно.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...