hive:用不同的键连接两个表

lf3rwulv  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(377)

我有两张像下面这样的table。基本上我想加入他们两个和预期的结果如下。
表2的前3行没有任何活动id为空。
所有字段都用制表符分隔。“33”类有三种描述,如表2所示。
我们需要使用“activity id”来获得“33”类别的结果,因为它有3个值。
有人能告诉我如何实现这个输出吗?

表:1

empid类别活动ID
44126 33列车
44127 10号ufl
44128 12台
44129 33未分配
44130 15微软
44131 33福利
44132 43福利

表2:

类别活动ID类别ESC
10计费
12计费
15不计费
33列车培训
33未分配的工作台
33福利
43福利

预期产量:

44126 33培训
44127 10计费
44128 12计费
44129 33长凳
44130 15非计费
44131 33福利
44132 43福利

uwopmtnx

uwopmtnx1#

我不知道我是否理解你的问题或你的数据,但这会起作用吗?

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

oymdgrw72#

做这个Hive有点困难,因为有很多限制。我就是这样解决的,但还有更好的办法。
我给你们的table命名如下。表1=EMP活动表2=activitymas
挑战来自表2中的空字段。我创建了一个视图,并使用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 jobs。下面是我得到的结果。

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

相关问题