标签:
Hive中表连接操作大致分为以下四种:
1:join即等值连接,只有某个值在两个表中同时存在才会被检索出来。
2:left outer join即左外连接,左边表中的值无论是否存在右表中,都会输出,但是右表中的记录只有在左表中存在时才会输出。
3:right outer join即右外连接,右边表中的值无论是否存在左表中,都会输出,但是左表中的记录只有在右边中存在时才会输出(和left outer join相反)。
4:left semi join即左半连接,类似于exits。
下面我们通过具体的例子来说明这几种连接操作:
#user表中的数据如下:
#post表中的数据如下:
一:等值连接
查询出来的结果如下:
二:左外连接
查询出来的结果如下:
注:从上面的结果可以看出,post表的uid只有在user表中存在时才会输出记录,否则输出NULL。
三:右外连接
查询出来的结果如下:
注:从上面的结果可以看出,user表中的id只有在post表中存在时才会输出记录,否则输出NULL。
四:左半连接
查询出来的结果如下:
这个left semi join比较有意思,因为Hive中没有in/exits这样的子句,但是我们有需要这样的操作,所以Hive将这种类型的子句转换成left semi join。
上面的语句可以简写为如下形式:
上面的HQL语句等价于下面的SQL语句:
标签:
原文地址:http://www.cnblogs.com/thinkpad/p/5173660.html