Hive中join, outer join, semi join区别

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

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

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

outerjoin分为leftouterjoin、rightouterjoin和fullouterjoin。

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

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

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

semijoin最主要的使用场景就是解决existin。

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

SELECTa.key,a.value

FROMa

WHEREa.keyin(SELECTb.keyFROMB);

可以改写为:

SELECTa.key,a.value

FROMaLEFTOUTERJOINbON(a.key=b.key)

WHEREb.key<>NULL;

一个更高效的实现为:

SELECTa.key,a.value

FROMaLEFTSEMIJOINbon(a.key=b.key);

leftsemijoin是0.5.0以上版本的特性。

去掉关键字的报错

sethive.support.sql11.reserved.keywords=false;

相关推荐