Сохранение максимальной суммы транзакции и сохранение второй по величине суммы транзакции в периоде просмотра - PullRequest
0 голосов
/ 29 марта 2020

У меня есть следующий запрос (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.

Спасибо

1 Ответ

0 голосов
/ 29 марта 2020

Я предполагаю, что проблема с производительностью заключается в том, что у вас есть несколько клиентов с большим количеством транзакций. Я предполагаю, что Hive использует order by компонент оконной функции на одном процессоре.

Вы можете проверить, есть ли у вас выбросы с агрегацией:

select cust, count(*)
from dataset
group by cust
order by count(*) desc;

Если вы затем отфильтруйте выбросы из вашего запроса, вы можете обнаружить, что они работают намного лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...