带有 OR 条件的 Hive 连接

标签 hive

我有一张很大的 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/

相关文章:

hadoop - 在Hive中,如何仅将部分原始数据加载到表中?

hadoop - 如何在配置单元时间戳中存储日期值?

hive - 使用从另一个表中选择来创建外部表

hadoop - pig : get data from hive table and add partition as column

java - Java-GSS启动失败异常,由以下原因引起:org.apache.thrift.transport.TTransportException:GSS启动失败

bash - 通过Oozie Shell脚本运行配置单元查询时未找到表异常

hadoop - 创建 hive UDF

hadoop - 将大型数据集从 Hive 复制到本地目录

apache-spark - Spark 仓库 VS Hive 仓库

hadoop - 我使用了插入覆盖目录。现在我该如何访问该文件?