我有一张很大的 table TAB1
我需要从中选择符合条件的行
(TAB1.KEY1 = TAB2.KEY1 OR TAB1.KEY1 = TAB2.KEY2) AND TAB1.KEY2 = TAB2.KEY3
哪里
TAB2
是一张很小的 table 。我不能仅仅通过在 hive 中加入这两个表来做到这一点,因为 hive 不支持使用 OR 条件进行连接。我试图通过使用 union 子句来分离这些条件,但由于两个连接与大表,它似乎要贵得多。
有没有更好的方法来完成这项工作?附言我使用 hive 0.13
最佳答案
映射连接应该仅在一个表比另一个表小得多的假设下使用,我认为这里不是这种情况。
但是,提到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)
关于带有 OR 条件的 Hive 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34358460/