hive连接查询

watbbzwu  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(474)

我在 hive 里有两张table:
表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

在配置单元中有没有办法检索表2中不存在的新数据??
在其他数据库工具中,可以使用内部的左/右。但是内部左/右在Hive中不存在,建议如何实现这一点?

vu8f3i0k

vu8f3i0k1#

在测试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)

执行顺序不在子查询可能会得到错误的结果。
在上面的示例中,值为('nail','egan',28,7.2)的新记录不会显示为带有顺序not in语句的新记录。

trnvg8h3

trnvg8h32#

如果使用的配置单元版本>=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) ...;

相关问题