Hive加入OR条件

时间:2015-12-18 15:02:04

标签: hive

我有一个很大的桌子TAB1,我需要从中选择符合条件的行

(TAB1.KEY1 = TAB2.KEY1 OR TAB1.KEY1 = TAB2.KEY2) AND TAB1.KEY2 = TAB2.KEY3 

其中TAB2是一张非常小的桌子。

我不能仅仅通过在hive中连接这两个表来实现它,因为hive不支持OR条件的连接。我试图通过使用union子句来区分这些条件,但由于有两个大表连接,它似乎要贵得多。

有没有更好的方法来完成这项工作?附:我使用hive 0.13

2 个答案:

答案 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