Поворот столбца с апострофом в DBT - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь развернуть столбец с помощью апострофа, но в DBT это очень сложно. Любые идеи? Я пробовал использовать двойные кавычки, но dbt не улавливает это, и я не могу использовать подобный оператор в сводной таблице.

 {% set pvt_details=[
      ('General liability cover_rated_premium' , 'gl_premium')
    , ('Contractors' errors and omissions cover_rated_premium','eo_premium') ] %}
 WITH filtered AS (
     SELECT
     quote_id
    , target
    , premium_after_amount
 from {{ source('acdc', 'chopin_quote_rating_steps') }} cqrs
 WHERE target IN ({% for column in pvt_details %} '{{column[0]}}' {%- if not loop.last -%} 
, {%- endif %}
  {% endfor %})
    AND action = 'initial_premium'
  )
  select *
  from filtered
  pivot(sum(premium_after_amount)
   for target in ({% for column in pvt_details %} '{{column[0]}}' {%- if not loop.last -%} , 
{%- endif %}
{% endfor %}))
  as p (quote_id,
        {% for column in pvt_details %} {{column[1]}} {%- if not loop.last -%} , {%- endif 
%}
        {% endfor %})

Ответы [ 3 ]

0 голосов
/ 25 июня 2020

, если они хотят придерживаться своего собственного запроса, я подозреваю, что они заменили

«Ошибки и упущения подрядчиков cover_rated_premium»

на «Ошибки и упущения подрядчиков cover_rated_premium», где вы используете "

вместо «может исправить?», Но не уверен на 100%, вызывает ли здесь что-либо еще проблемы. Я действительно думаю, что макрос pivot для утилит должен работать отлично! Просто не уверен, справится ли он с «хорошо» (я Думаю, так и должно быть). Они также не смогут переименовать столбец на том же этапе, что и сводная таблица (что, я думаю, происходит здесь), но они могут легко использовать функцию сводной таблицы, а затем переименовать столбцы в последующем CTE

От Андрея в DBT

0 голосов
/ 25 июня 2020

{% set pvt_details = [('Покрытие общей ответственности_rated_premium', 'gl_premium'), ("Ошибки и упущения подрядчика покрывают_rated_premium", 'eo_premium')]%} выберите

concat_ws(' :: ',
    {% for column in pvt_details %} 
        '{{ column[0] }}'
    {%- if not loop.last -%},  {%- endif %}
    {% endfor %}
) as column_selection

от {{ref ('reference_model')}} ограничение 1 Свернуть

От Кристины из DBT. У Jinja2 есть проблема с цитированием, как это делают многие другие языки = /.

0 голосов
/ 24 июня 2020

Попробуйте эту ссылку в макросах DBT. Есть макрос только для разворота.

https://github.com/fishtown-analytics/dbt-utils/blob/master/macros/sql/pivot.sql

{# Значения разворота из строк в столбцы.

Пример:

Input: `public.test`

| size | color |
|------+-------|
| S    | red   |
| S    | blue  |
| S    | red   |
| M    | red   |

select
  size,
  {{ dbt_utils.pivot('color', dbt_utils.get_column_values('public.test',
                                                          'color')) }}
from public.test
group by size

Output:

| size | red | blue |
|------+-----+------|
| S    | 2   | 1    |
| M    | 1   | 0    |

Аргументы: столбец: имя столбца, обязательные значения: список значений строк для преобразования в столбцы, требуемый псевдоним: следует ли создавать псевдонимы столбцов, по умолчанию - True agg: SQL функция агрегирования, по умолчанию - sum cmp: SQL сравнение значений, по умолчанию = prefix: Префикс псевдонима столбца, по умолчанию - пустой суффикс: Постфикс псевдонима столбца, по умолчанию - пустой quote_identifiers: следует ли заключать псевдонимы столбцов в двойные кавычки, по умолчанию - true #}

{% macro pivot (column, values, alias = True, agg = 'sum', cmp = '=', prefix = ' ', suffix =' ', then_value = 1, else_value = 0, quote_identifiers = True)%} {% для v в значениях%} {{agg}} (случай, когда {{column}} {{cmp}}' {{ v}} 'then {{then_value}} else {{else_value}} end) {% if псевдоним %} {% if quote_identifiers%} как {{адаптер.quote (префикс ~ v ~ суффикс)}} {% else%} как {{префикс ~ v ~ суффикс}} {% endif%} {% endif%} {% если не l oop .last%}, {% endif%} {% endfor%} {% endmacro%}

...