У меня есть следующий запрос (HiveQL), который вычисляет максимальную сумму транзакции для клиента с даты совершения транзакции и сохраняет предыдущую максимальную сумму транзакции до даты, когда транзакция была сделана.
Запрос
PROC SQL;
CREATE TABLE TXN_AMT AS
SELECT *,
MAX(TXN_AMT) OVER (PARTITION BY CUST ORDER BY TXN_DATE DESC ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS MAX
MAX(TXN_AMT) OVER (PARTITION BY CUST ORDER BY TXN_DATE DESC ROWS BETWEEN 1 AND UNBOUNDED FOLLOWING) as Max2
FROM dataset;
QUIT;
Пример выходных данных
cust txn_date txn_amt max max2
1 29/3/20 100 100 70
1 28/3/20 50 70 20
1 2/3/20 20 70 20
1 15/2/20 70 70 - (no previous txn to take max2)
Issue
Мне нужно выполнить этот запрос для набора данных, содержащего миллионы строк. К сожалению, этот запрос не будет запущен для набора данных 360k.
Пробные решения
Я попытался выполнить запрос непосредственно в Hive & Spark, но безуспешно - время выполнения слишком велико. Я пытался переписать код с помощью функции lag (), но без особого успеха.
Кто-нибудь знает, как переписать вышеуказанный запрос, чтобы получить желаемый результат с оптимальной производительностью? Запрос должен быть в Python или HiveQL.
Спасибо