在配置单元中使用Null检查的左外部联接查询不起作用

时间:2018-06-20 14:12:00

标签: hive null bigdata hql

我写了一个查询来查找一个表中存在但另一个表中不存在的记录。这是查询

CREATE TABLE kai_prod.Held1Miss AS 
SELECT distinct jndheld.icerecordid from 
(
SELECT held1.icerecordid,held2.icerecordid icerecordid2 
FROM kai_prod.tblheld116 held1 LEFT OUTER JOIN
kai_prod.tblheld216 held2 ON
held1.icerecordid = held2.icerecordid
) jndheld
WHERE jndheld.icerecordid2 IS NULL;

我在kai_prod.Held1Miss中得到了266585的计数

但是,当我使用以下查询仔细检查时,我发现以上计数是错误的。上面的数字应该为零

select count(*) from kai_prod.tblheld116 INNER JOIN
kai_prod.Held1Miss ON
tblheld116.icerecordid = Held1Miss.icerecordid;

266585

这是蜂巢中的错误还是NUll问题?

请找到版本详细信息。

我们正在Azure上的Microsoft HDInsight发行版上运行带有火花的Hadoop

hive --version 蜂巢1.2.1000.2.6.2.3-1 颠覆git://ctr-e134-1499953498516-137771-01-000004.hwx.site/grid/0/jenkins/workspace/HDP-parallel-ubuntu16/SOURCES/hive -r 4e24791861b0ce72f1185e572ffe1fd7f737dfdd 由jenkins于UTC 2017年9月14日08:04:15编译 来自带有校验和的源77da03c67efbe84d5e5b69bd4d91ad54

hadoop版本 Hadoop 2.7.3.2.6.2.3-1 颠覆git@github.com:hortonworks / hadoop.git -r 1ceeb58bb3bb5904df0cbb7983389bcaf2ffd0b6 jenkins于2017-09-14T07:25Z编译 与协议2.5.0一起编译 来自带有校验和的源90b73c4c185645c1f47b61f942230 使用/usr/hdp/2.6.2.3-1/hadoop/hadoop-common-2.7.3.2.6.2.3-1.jar

运行此命令

2 个答案:

答案 0 :(得分:1)

左外部联接将始终从左表中产生行。

请使用内部联接以获取所需的结果。

谢谢

答案 1 :(得分:1)

我认为您的第二条sql可能是错误的:

select count(*) from kai_prod.tblheld116 INNER JOIN
kai_prod.Held1Miss ON
tblheld116.icerecordid = Held1Miss.icerecordid;

您应该联接表kai_prod.tblheld216而不是kai_prod.tblheld116来仔细检查空键