У меня есть общее табличное выражение с оконной функцией, и я получаю сообщение об ошибке:
Ошибка при компиляции оператора: FAILED: SemanticException не удалось
Разбивка оконных вызовов на группы. По крайней мере, 1 группа должна только
зависит от входных столбцов. Также проверьте наличие циклических зависимостей.
Основная ошибка: org.apache.hadoop.hive.ql.parse.SemanticException:
Строка 82: 6 Недопустимая ссылка на столбец «gcr_amt» в определении CTE
pro_orders [выберите o.shopper_id как pro_shopper_id,
date_format (o.order_date, 'YYYYMM') как ym_order, сумма (o.gcr_amt) как
total_gcr, sum (случай, когда o.product_pnl_new_renewal_name = 'New
Покупка 'затем o.gcr_amt end) как new_gcr, сумма (o.gcr_amt) более
(разделить по строкам o.shopper_id между 12 предыдущими и 1 последующими)
как 12months_direct_gcr из dp_enterprise.uds_order o внутреннее соединение
Combined_shopper_level_data cs на cs.pro_shopper_id = o.shopper_id и
cs.year_month = date_format (o.order_date, 'YYYYMM') где
o.exclude_reason_desc - пустая группа от o.shopper_id, o.order_date]
используется как ро в строке 83: 5
Мой компьютер выглядит так:
pro_orders as (
select o.shopper_id as pro_shopper_id,
date_format(o.order_date, 'YYYYMM') as ym_order,
sum(o.gcr_amt) as total_gcr,
sum(case when o.product_pnl_new_renewal_name = 'New Purchase' then o.gcr_amt end) as new_gcr,
sum(o.gcr_amt) over (partition by o.shopper_id, cs.year_month order by cs.year_month desc rows between 12 preceding and 0 following) as 12months_direct_gcr
from dp_enterprise.uds_order o
right join combined_shopper_level_data cs on cs.pro_shopper_id = o.shopper_id and cs.year_month = date_format(o.order_date, 'YYYYMM')
group by o.shopper_id, o.order_date
),
Я не часто использую оконные функции и, возможно, мой синтаксис отключен. В английском я пытаюсь получить итоговую сумму за 12 месяцев по метрике "gcr".
Итак, в строке с shopper_id 123abc в year_month 201901 я бы хотел суммировать предыдущие 11 месяцев плюс текущий месяц строк gcr для итоговых 12 месяцев. Не уверены, правильно ли настроена моя оконная функция для этого или нет?
Формат ссылки на год_месяц - ГГГГММ, например 201901.
Правильно ли настроена моя оконная функция с учетом моей цели?
Как мне преодолеть это сообщение об ошибке?
Edit:
Все еще получаю это сообщение об ошибке со следующим CTE:
pro_orders as (
select o.shopper_id as pro_shopper_id,
cs.year_month,
sum(case when date_format(o.order_date, 'YYYYMM') = cs.year_month then o.gcr_amt else 0 end) as total_gcr,
sum(case when date_format(o.order_date, 'YYYYMM') = cs.year_month and o.product_pnl_new_renewal_name = 'New Purchase' then o.gcr_amt else 0 end) as new_gcr,
sum(sum(o.gcr_amt)) over (partition by o.shopper_id
order by cs.year_month desc
rows between 12 preceding and 0 following)
as 12months_direct_gcr
from combined_shopper_level_data cs
left join dp_enterprise.uds_order o on o.shopper_id = cs.pro_shopper_id
where o.exclude_reason_desc is Null
group by o.shopper_id, cs.year_month
),
В результате появляется похожее сообщение об ошибке:
Ошибка при компиляции оператора: FAILED: SemanticException не удалось
Разбивка оконных вызовов на группы. По крайней мере, 1 группа должна только
зависит от входных столбцов. Также проверьте наличие циклических зависимостей.
Основная ошибка: org.apache.hadoop.hive.ql.parse.SemanticException:
Строка 83:10 Недопустимая ссылка на столбец 'gcr_amt' в определении CTE
pro_orders [выберите o.shopper_id как pro_shopper_id, cs.year_month,
сумма (случай, когда date_format (o.order_date, 'YYYYMM') = cs.year_month затем
o.gcr_amt иначе 0 end) как total_gcr, сумма (случай, когда
date_format (o.order_date, 'YYYYMM') = cs.year_month и
o.product_pnl_new_renewal_name = 'Новая покупка' тогда o.gcr_amt еще 0
end) as new_gcr, сумма (sum (o.gcr_amt)) over (разбиение по o.shopper_id
упорядочить по cs.year_month (между 12 предыдущими и 0 последующими)
как 12months_direct_gcr из комбинированных_шопперов_данных_данных cs оставил соединение
dp_enterprise.uds_order o на o.shopper_id = cs.pro_shopper_id где
o.exclude_reason_desc - пустая группа от o.shopper_id, cs.year_month]
используется как ро в строке 87: 5