Hive的left join,left outer join和left semi join三者的区别

如题所述

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。


最常用的就是多表关联查询,主要讲解下join、outer join和semi join的具体使用。


join是最简单的关联操作,两边关联只取交集。

Hive没有left join !!!

outer join分为left outer join、right outer join和full outer join。

left outer join是以左表驱动,右表不存在的key均赋值为null;

right outer join是以右表驱动,左表不存在的key均赋值为null;

full outer join全表关联,将两表完整的进行笛卡尔积操作,左右表均可赋值为null。


semi join最主要的使用场景就是解决exist in。

Hive不支持where子句中的子查询,SQL常用的exist in子句在Hive中是不支持的。

SELECT a.key, a.value

FROM a

WHERE a.key in (SELECT b.key FROM B);

可以改写为:

SELECT a.key, a.value

FROM a LEFT OUTER JOIN b ON (a.key = b.key)

WHERE b.key <> NULL;

一个更高效的实现为:

SELECT a.key, a.value

FROM a LEFT SEMI JOIN b on (a.key = b.key);


left semi join是0.5.0以上版本的特性。

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网