我有两张桌子如下。基本上我想加入他们两个并期望结果如下。
表2的前3行没有任何活动ID只是空的。
所有字段均以制表符分隔。类别“33”根据表2具有三种描述。
我们需要使用“活动ID”来获取“33”类别的结果,因为有3个值。
谁能告诉我如何实现这个输出?
Empid类别活动ID
44126 33火车
44127 10 UFL
44128 12 TOI
44129 33未经许可
44130 15 MICROSOFT
44131 33福利
44132 43福利
类别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福利
答案 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