我这几天在学习 HIVE,遇到了一些问题...
我有一个名为 SAMPLE 的表:
USER_ID PRODUCT_ID NUMBER
1 3 20
1 4 30
1 2 25
1 6 50
1 5 40
2 1 10
2 3 15
2 2 40
2 5 30
2 3 35
Run Code Online (Sandbox Code Playgroud)
如何使用 HIVE 按 user_id 对表进行分组,并在每个组中按 NUMBER 的 DESC 顺序对记录进行排序,并且在每个组中我希望最多保留 3 条记录。
我想要的结果是这样的:
USER_ID PRODUCT_ID NUMBER(optional column)
1 6 50
1 5 40
1 4 30
2 2 40
2 3 35
2 5 30
or
USER_ID PRODUCT_IDs
1 [6,5,4]
2 [2,3,5]
Run Code Online (Sandbox Code Playgroud)
有人可以帮我吗?..非常感谢!!!!!!!!!!!!!!!!!!
尝试这个,
select user_id,product_id,number
from(
select user_id,product_id,number, ROW_NUMBER() over (Partition BY user_id) as RNUM
from (
select user_id, number,product_id
from SAMPLE
order by number desc
) t) t2
where RNUM <=3
Run Code Online (Sandbox Code Playgroud)
输出
1 6 50
1 5 40
1 4 30
2 2 40
2 3 35
2 5 30
Run Code Online (Sandbox Code Playgroud)
hive 版本应该是 0.11 或更高,我可以知道你的版本是否更低
| 归档时间: |
|
| 查看次数: |
1434 次 |
| 最近记录: |