HiveQL-запрос для нахождения дельты между строками, если условие соответствует - PullRequest
0 голосов
/ 04 марта 2019

У меня есть некоторые данные в озере данных:

Person |  Date    |  Time    |  Number of Friends  |  
Bob    |  02/01   | unix_ts1 |  5                  |
Kate   |  02/01   | unix_ts2 |  2                  |
Jill   |  02/01   | unix_ts3 |  3                  |
Bob    |  02/01   | unix_ts3 |  7                  |
Kate   |  02/02   | unix_ts4 |  10                 |
Jill   |  01/29   | unix_ts0 |  1                  |

Я хотел бы создать такую ​​таблицу:

Person |  Date    |  Time    |  Number of Friends DELTA  | Found Diff Between
Bob    |  02/01   | unix_ts1 |  NaN                      | (5, NaN)
Kate   |  02/01   | unix_ts2 |  NaN                      | (2, NaN)
Jill   |  02/01   | unix_ts3 |  2                        | (3, 1)
Bob    |  02/01   | unix_ts3 |  2                        | (7, 5)
Kate   |  02/02   | unix_ts4 |  8                        | (10, 2)

Итак, у меня есть таблица, в которой идентифицируется каждая строкапо имени человека и времени, когда данные были записаны.Я хотел бы запрос, который будет искать экземпляры «Боб» и находить дельты для последовательных меток времени, а затем дать дельту, а также два значения, которые он нашел разницу между.Я бы хотел, чтобы это произошло с каждым человеком.

Я нашел способ сделать это, когда есть только одно значение, с помощью команды lag (), но это не будет соответствовать Person.Я также знаю, как сделать это в Pandas, если я скачал данные, но мне интересно, есть ли способ сделать это в Hive.

Есть ли способ сделать это?Спасибо!

1 Ответ

0 голосов
/ 04 марта 2019

Использование lag оконной функции.

select person
      ,date
      ,time
      ,num_friends-lag(num_friends) over(partition by person order by time) as delta
      ,concat_ws(',',num_friends,lag(num_friends) over(partition by person order by time)) as found_diff_between
from tbl
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...