Hive 配置单元-使用半联接中不存在Use

Hive 配置单元-使用半联接中不存在Use,hive,Hive,我需要在配置单元中的查询中使用NOT 我有3张表A、B和C B带有字段PRODUCT、ID和VALUE。 带有字段ID和值的C 我需要将表B中的行(表C中没有匹配的ID和值字段)写入表A 插入覆盖表A 挑选* 从B到B 左半连接C开(b.ID=C.ID和b.VALUE=C.VALUE),其中b.ID=NULL和b.VALUE=NULL 来自http://stackoverflow.com/questions/25041026/hive-left-semi-join-for-not-exists不

我需要在配置单元中的查询中使用NOT

我有3张表A、B和C

B带有字段PRODUCT、ID和VALUE。 带有字段ID和值的C

我需要将表B中的行(表C中没有匹配的ID和值字段)写入表A

插入覆盖表A
挑选*
从B到B
左半连接C开(b.ID=C.ID和b.VALUE=C.VALUE),其中b.ID=NULL和b.VALUE=NULL

来自
http://stackoverflow.com/questions/25041026/hive-left-semi-join-for-not-exists
不起作用,正如我在WHERE子句中提到的右侧表格,不应该这样做

如何在不引用WHERE子句中右侧表的情况下形成等效查询

任何其他解决方案?

解决方案:

检查目标表是否包含两个表中的所有字段。因为,这里用*

那么, 它应该是b。值是NULL,而不是=NULL

查询应如下所示:

INSERT OVERWRITE TABLE A a 
SELECT * FROM B b 
LEFT SEMI JOIN C c 
ON (b.ID = c.ID AND b.VALUE = c.VALUE) where 
b.ID IS NULL AND b.VALUE IS NULL;

配置单元似乎从0.13开始支持IN、NOT IN、EXIST和NOT EXISTS

Select A.Id,A.*
From A
Where EXISTS (Select 1 From B where A.ID = B.ID)
EXIST和NOT EXISTS中的子查询应该具有相关谓词(如上面示例中的b.ID=a.ID),有关更多信息,请参阅