我需要根据另一个表的优先级匹配id。哪种方法最有效、最好?
Table 1:
cd priority
1 10
2 20
3 30
4 40
5 50
Table 2:
ID cd
1001 2
1001 4
1001 5
1002 1
1002 3
1002 5
1003 6
Expected Output:
ID cd
1001 2
1002 1
我已经提到了我尝试过的,但是我想知道在这个场景中,hive/spark中是否有我们可以利用的功能。
select * from (select tb1.cd, tb2.id , tb1.priority, RANK() OVER (PARTITION BY tb2.id ORDER BY tb1.priority ) rnk
from Table1 tb1
inner join
Table2 tb2
on tb1.cd = tb2.cd) a
where a.rnk =1
1条答案
按热度按时间fruv7luv1#
在您的场景中,第一个表似乎足够小,可以放入内存。如果是这样,请确保spark广播它以执行连接。
你可以用
explain
查看spark生成的计划。如果您没有看到广播正在进行,请在执行查询时指定一个提示。希望有帮助!