Hive:使用不同的键连接两个表

时间:2013-03-29 12:01:52

标签: hadoop hql hive hiveql

我有两张桌子如下。基本上我想加入他们两个并期望结果如下。

表2的前3行没有任何活动ID只是空的。

所有字段均以制表符分隔。类别“33”根据表2具有三种描述。

我们需要使用“活动ID”来获取“33”类别的结果,因为有3个值。

谁能告诉我如何实现这个输出?

表:1

Empid类别活动ID

44126 33火车

44127 10 UFL

44128 12 TOI

44129 33未经许可

44130 15 MICROSOFT

44131 33福利

44132 43福利

表2:

类别ActivityID Categdesc

10 billable

12 billable

15不可计费

33培训培训

33未经审查的法官

33福利待遇

43项好处

预期输出:

44126 33培训

44127 10 Billable

44128 12 Billable

44129 33 Bench

44130 15不可收费

44131 33福利

44132 43福利

2 个答案:

答案 0 :(得分:1)

我不确定我是否理解您的问题或您的数据,但这会有效吗?

select table1.empid, table1.category, table2.categdesc
from table1 join table2
on table1.activityID = table2.activityID;

答案 1 :(得分:1)

要做这个Hive有点困难,因为有很多限制。这就是我解决它的方法,但可能有更好的方法。

我将你的表命名如下。 表1 = EmpActivity 表2 = ActivityMas

挑战来自Table2中的空字段。我创建了一个视图和使用UNION来组合来自两个不同查询的结果。

Create view actView AS Select * from ActivityMas Where Activityid ='';

SELECT * From (
Select EmpActivity.EmpId, EmpActivity.Category, ActivityMas.categdesc
from EmpActivity JOIN ActivityMas 
ON  EmpActivity.Category =  ActivityMas.Category 
AND EmpActivity.ActivityId = ActivityMas.ActivityId
UNION ALL
Select EmpActivity.EmpId, EmpActivity.Category, ActView.categdesc from EmpActivity
JOIN ActView ON  EmpActivity.Category =  ActView.Category
)

您必须使用顶级SELECT子句,因为顶级语句不直接支持UNION ALL。这将运行总共3个MR作业。以下是我得到的结果。

44127   10      billable
44128   12      billable
44130   15      Non-billable
44132   43      Benefits
44131   33      Benefits
44126   33      Training
44129   33      Bench