powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / Hadoop impala/hive подскажите, в какую сторону смотреть, что из функций можно использовать
4 сообщений из 4, страница 1 из 1
Hadoop impala/hive подскажите, в какую сторону смотреть, что из функций можно использовать
    #39763834
OlgaM12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер, уже сломала голову над задачей, может у кого-то будут дельные предложения:

У меня есть витрина Hadoop, использую sql:

В витрине содержатся данные вида инн(client), коэффициент (k), квартал(q), год(y)

Т.е. например,
Client K Q Y
1234 1 1 2015
1234 3 2 2015
1234 4 3 2015
1234 2 4 2015
1234 3 1 2016
1234 1 2 2016
1234 5 3 2016

Мне нужно посчитать значение Vn=0,8*k+0,2*Vn-1

Т.е. в моем примере 2014 будет 0, т.к его нет Q1/2015=0,8*1+0,2*0
Q1/2016=0,8*3+0,2*Q1/2015. И так за каждый квартал. Квартал сравниваем с таким же по очередности кварталом предыдущего года.
Я понимаю как это сделать добавив ещё таблиц на каждый год - но это не вариант для промышленного решения.
Использовала lag, но в рамках k, не могу найти как взять итог предыдущего вычисления
...
Рейтинг: 0 / 0
Hadoop impala/hive подскажите, в какую сторону смотреть, что из функций можно использовать
    #39764493
Бумбараш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал в оракле

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
CREATE TABLE tst(client NUMBER
, K NUMBER
, Q NUMBER
, Y number)

INSERT INTO tst VALUES(1234, 1, 1, 2015);
INSERT INTO tst VALUES(1234, 3, 2, 2015);
INSERT INTO tst VALUES(1234, 4, 3, 2015);
INSERT INTO tst VALUES(1234, 2, 4, 2015);
INSERT INTO tst VALUES(1234, 3, 1, 2016);
INSERT INTO tst VALUES(1234, 1, 2, 2016);
INSERT INTO tst VALUES(1234, 5, 3, 2016);


SELECT a.client, a.k, a.Q, a.Y, VN
FROM (
	SELECT tst.*, prevq.Y prevy, sum(0.8 * prevq.K * power(0.2, tst.y - prevq.y)) OVER (PARTITION BY tst.Y, tst.Q) AS vn
	FROM tst
	LEFT JOIN tst prevq
	ON tst.client = prevq.client
	AND prevq.Y <= tst.Y
	AND prevq.Q = tst.Q
	) a
WHERE a.y = a.prevy
ORDER BY a.Y, a.Q



результат

...
Рейтинг: 0 / 0
Hadoop impala/hive подскажите, в какую сторону смотреть, что из функций можно использовать
    #39764504
Бумбараш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
смысл в том, что формулу

Vn = 0,8*k + 0,2 *Vn-1

можно представить в виде

Vn = 0,8*k + 0,2 * 0,8 * k-1 + 0,2*0,2*Vn-2 +..

или

Vn = 0,8*k*0,2**(Yn-Yn) + 0,8*k*0,2**(Yn-Yn-1) + ..

для этого делаем лефт джойн таблицы с самой собой, чтобы получить для каждого квартала строки из предыдущих кварталов. Потом суммируем всё с соответствующими степенями 0,2. Для текущей строки степень будет 0, то есть просто 0,8*k.
...
Рейтинг: 0 / 0
Hadoop impala/hive подскажите, в какую сторону смотреть, что из функций можно использовать
    #39765458
OlgaM12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бумбараш,

Спаааасибо!! Это помогло)))
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / Hadoop impala/hive подскажите, в какую сторону смотреть, что из функций можно использовать
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]