在 hive 中使用 Null 检查的左外连接查询不起作用

Posted

技术标签:

【中文标题】在 hive 中使用 Null 检查的左外连接查询不起作用【英文标题】:Left outer join query with Null check in hive is not working 【发布时间】:2018-06-20 14:12:00 【问题描述】:

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

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

这是 Hive 中的错误还是 NUll 的问题?

请查看版本详情。

我们在 Azure 中的 Microsoft HDInsight 发行版上使用 spark 运行 hadoop

蜂巢--版本 蜂巢 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 詹金斯于 2017 年 9 月 14 日星期四 08:04:15 UTC 编译 来自带有校验和 77da03c67efbe84d5e5b69bd4d91ad54 的源代码

hadoop 版本 Hadoop 2.7.3.2.6.2.3-1 颠覆 git@github.com:hortonworks/hadoop.git -r 1ceeb58bb3bb5904df0cbb7983389bcaf2ffd0b6 詹金斯于 2017-09-14T07:25Z 编译 使用 protoc 2.5.0 编译 来自带有校验和 90b73c4c185645c1f47b61f942230 的源 该命令是使用 /usr/hdp/2.6.2.3-1/hadoop/hadoop-common-2.7.3.2.6.2.3-1.jar 运行的

【问题讨论】:

【参考方案1】:

左外连接总是从左表产生行。

请使用内部连接来获得所需的结果。

谢谢

【讨论】:

【参考方案2】:

我认为你的第二个 sql 可能是错误的:

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

您应该加入表 kai_prod.tblheld216 而不是 kai_prod.tblheld116 以仔细检查空键

【讨论】:

以上是关于在 hive 中使用 Null 检查的左外连接查询不起作用的主要内容,如果未能解决你的问题,请参考以下文章

LINQ查询中的左外连接[重复]

使用 LINQ 查询语法 EF Core C# 的左外连接

sql查询中的左外连接

带有子查询的左外连接?

真正的左外连接

删除重复的左外连接