蜂巢连接查询

Hive Joins query

我在配置单元中有两个 table:

Table1:

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

Table 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 中是否有任何方法可以检索 table 2 中不存在于 table 1 中的新数据?

在其他数据库工具中,您将使用内部 left/right。但是 inner left/right 在 Hive 中不存在,建议如何实现?

如果您使用的 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) ...;

在测试 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 语句的新记录。