Hive加入查询

时间:2016-05-17 15:28:32

标签: hadoop hive hiveql apache-hive

我在蜂巢中有两张桌子:

表1:

1,Nail,maher,24,6.2
2,finn,egan,23,5.9
3,Hadm,Sha,28,6.0
4,bob,hope,55,7.2

表2:

1,Nail,maher,24,6.2
2,finn,egan,23,5.9
3,Hadm,Sha,28,6.0
4,bob,hope,55,7.2
5,john,hill,22,5.5
6,todger,hommy,11,2.2
7,jim,cnt,99,9.9
8,will,hats,43,11.2

Hive有没有办法检索表2中不存在于表1中的新数据?

在其他数据库工具中,您将使用内部左/右。但内左/右并不存在于Hive中,并建议如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

如果您使用的是Hive版本> = 0.13,则可以使用此查询:

SELECT * FROM A WHERE A.firstname, A.lastname ... IN (SELECT B.firstname, B.lastname ... FROM B);

但我不确定Hive是否支持IN子句中的多个coloumns。 如果不是这样的话可以起作用:

SELECT * FROM A WHERE A.firstname IN (SELECT B.firstname FROM B) AND A.lastname IN (SELECT b.lastname FROM B) ...;

答案 1 :(得分:0)

在测试NOT IN之前将字段连接在一起可能更明智:

SELECT * 
FROM t2 
WHERE CONCAT(t2.firstname, t2.lastname, CAST(t2.val1 as STRING), CAST(t2.val2 as STRING)) NOT IN
    (SELECT CONCAT(t2.firstname, t2.lastname, CAST(t2.val1 as STRING), CAST(t2.val2 as STRING))
    FROM t1)

执行连续的NOT IN子查询可能会给您带来错误的结果。

从上面的示例中,带有值(&#39; nail&#39;,&#39; egan&#39;,28,7.2)的新记录不会显示为带有连续NOT IN语句的新记录。< / p>