Hive如何实现join操作

Hive如何实现join操作

Hive如何实现join操作_第1张图片
这两张表都有一个相同的字段userid,根据这个字段可以将两张表连接起来,pv_users表,
Hive如何实现join操作_第2张图片
SQL命令是

SELECT pv.pageid, u.age FROM page_view pv JOIN user u ON (pv.userid = u.userid);

同样,这个SQL命令也可以转化为MapReduce计算,连接的过程如下图所示。
Hive如何实现join操作_第3张图片
从图上看,join的MapReduce计算过程group by稍有不同,因为join涉及两张表,来自两个文件(夹),所以需要在map输出的时候进行标记,比如来自第一张表的输出Value就记录为<1, X>,这里的1表示数据来自第一张表。这样经过shuffle以后,相同的Key被输入到同一个reduce函数,就可以根据表的标记对Value数据求笛卡尔积,用第一张表的每条记录和第二张表的每条记录连接,输出就是join的结果。

所以我们如果打开Hive的源代码,看join相关的代码,会看到一个两层for循环,对来自两张表的记录进行连接操作。

你可能感兴趣的:(Hive)