最近开始搞商业智能(BI)项目的一些东东,在项目中用到了hive的一些知识,学习后发现hive的join方式还挺多,不像是musql 中那几种 (INNER JOIN,LEFT JOIN,RIGHT JOIN),hive 的 join可是分起码七种的,分表包含:
- INNER JOIN
- CROSS JOIN
- LEFT OUTER JOIN 等价于 LEFT JOIN
- RIGHT OUTER JOIN 等价于 RIGHT JOIN
- FULL OUTER JOIN
- LEFT SEMI JOIN
- LEFT ANTI JOIN
这里我就不介绍 INNER JOIN,LEFT OUTER JOIN ,RIGHT OUTER JOIN,FULL OUTER JOIN 这4种了,毕竟这也是大家RDBMS 的老盆友了,此处我就不多废话了,开始介绍。
1.CROSS JOIN :
这个大哥可是一位狠人,返回两个表的笛卡尔积结果,使用时不需要指定关联键,给大家个样例代码:
SELECT ve.xxx, cu.yyy FROM aaa cu cross JOIN bbb ve ,记住这里不需要指定关键值,在实际应用中CROSS JOIN 因为产生的是笛卡尔积,所以大家在使用时慎用。
2.LEFT SEMI JOIN:
这个之前没玩过hive的人估计都很懵,这是个啥玩意呢? 我来说说这个 LEFT SEMI JOIN 其实是和inner join 用法是一样的,只不过它只能返回左表的数据,而不能返回右表的数据,这里需要注意 LEFT SEMI JOIN 这个连接只能返回左表内的数据,这里加一张
示意图:
这个图跟inner的很像吧,但是这个连接只能返回左表的数据项
3.LEFT ANTI JOIN :
这个跟LEFT SEMI JOIN 恰好相反,它查找的是没有匹配到右表的左表数据,这里附一张示意图:
以上就是最近的学习总结,先到这吧!