sql

qv7cva1a  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(281)

我需要根据另一个表的优先级匹配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
fruv7luv

fruv7luv1#

在您的场景中,第一个表似乎足够小,可以放入内存。如果是这样,请确保spark广播它以执行连接。
你可以用 explain 查看spark生成的计划。如果您没有看到广播正在进行,请在执行查询时指定一个提示。
希望有帮助!

相关问题