如果条件匹配,用于查找行之间的增量的hiveql查询

jucafojl  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(272)

我在数据湖有一些数据:

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                  |

我想制作一张这样的table:

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)

所以,我有一个表,其中每一行都由一个人的名字和记录数据的时间来标识。我想要一个查询,它将去寻找“bob”的示例,找到连续时间戳的delta,然后给出delta,以及它找到的两个值之间的差异。我希望每个人都这样。
当只有一个值时,我发现了一个方法,使用lag()命令,但它不能按人匹配。如果我下载了数据,我也知道如何在Pandas身上做到这一点,但我想知道是否有一种方法可以在Hive里做到这一点。
有办法吗?谢谢您!

lp0sw83n

lp0sw83n1#

使用 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

相关问题