0

我在蜂巢中有两个表:

表 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 中不存在内部左/右,并建议如何实现?

4

2 回答 2

1

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

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

但我不确定 Hive 是否支持 IN 子句中的多个列。如果不是这样的东西可以工作:

SELECT * FROM A WHERE A.firstname IN (SELECT B.firstname FROM B) AND A.lastname IN (SELECT b.lastname FROM B) ...;
于 2016-05-17T15:35:49.690 回答
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 子查询可能会给您错误的结果。

从上面的示例中,具有值 ('nail','egan',28, 7.2) 的新记录不会在顺序 NOT IN 语句中显示为新记录。

于 2016-05-24T05:09:41.860 回答