我有一个很大的桌子TAB1
,我需要从中选择符合条件的行
(TAB1.KEY1 = TAB2.KEY1 OR TAB1.KEY1 = TAB2.KEY2) AND TAB1.KEY2 = TAB2.KEY3
其中TAB2
是一张非常小的桌子。
我不能仅仅通过在hive中连接这两个表来实现它,因为hive不支持OR条件的连接。我试图通过使用union子句来区分这些条件,但由于有两个大表连接,它似乎要贵得多。
有没有更好的方法来完成这项工作?附:我使用hive 0.13
答案 0 :(得分:1)
地图连接应仅在假设一个表比另一个表小得多的情况下使用,我不认为这是这种情况。 但是,提到map side join的解决方案也有实际的通用解决方案,即将查询从JOIN更改为JOIN / WHERE组合。
SELECT ... FROM TAB1 JOIN TAB2 ON (TAB1.KEY2 = TAB2.KEY3 )
WHERE (TAB1.KEY1 = TAB2.KEY1 OR TAB1.KEY1 = TAB2.KEY2)
答案 1 :(得分:0)
尝试使用hive map side join加入 -
select /*+ MAPJOIN(TAB2) */ t1.* from TAB1 t1 join TAB2 on t1.KEY2 = t2.KEY3
where t1.KEY1 = t2.KEY1 OR t1.KEY1 = t2.KEY2