Поворот столбца с апострофом в DBT
Я пытаюсь повернуть столбец с помощью апострофа, но в DBT это очень сложно. Есть идеи? Я пробовал использовать двойные кавычки, но dbt не улавливает это, и я не могу использовать оператор Like в сводной таблице.
{% 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 ответа
Попробуйте эту ссылку в макросах 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, по умолчанию - сумма cmp: сравнение значений SQL, по умолчанию - = префикс: Префикс псевдонима столбца, по умолчанию - пустой суффикс: Постфикс псевдонима столбца, по умолчанию - пустой then_value: Значение, используемое в случае успешного сравнения, по умолчанию - 1 else_value: Значение, которое следует использовать, если сравнение не удается, по умолчанию - 0 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_value }} else {{ else_value }} end) {% if alias %} {% if quote_identifiers %} как {{адаптер.quote(префикс ~ v ~ суффикс) }} {% else %} как {{префикс ~ v ~ суффикс}} {% endif%} {% endif%} {% если не loop.last %},{% endif %} {% endfor %} {% endmacro %}
{% set pvt_details=[ ('Покрытие_премиум_представления_ общей ответственности', 'gl_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, похоже, есть проблема с цитированием, как это делают многие другие языки =/.
Если они хотят придерживаться своего собственного запроса, я подозреваю, что они заменят
"Ошибки и упущения подрядчиков" cover_rated_premium "
с "ошибками и упущениями подрядчиков cover_rated_premium", где вы используете "
вместо "может исправить?" но не уверен на 100%, что здесь что-то еще вызывает проблемы. Я считаю, что макрос утилиты pivot должен отлично работать! Просто не уверен, что он справится с этим (я думаю, что должен). Они также не смогут переименовать столбец на том же этапе, что и поворот (как я думаю, здесь происходит), но они могут легко использовать функцию поворота, а затем переименовать столбцы в следующем CTE
От Эндрю из DBT