0

我有两个如下表。基本上我想加入他们两个,并期望得到如下结果。

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

所有字段都是制表符分隔的。根据表 2,类别“33”具有三个描述。

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

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

表格1

Empid 类别 ActivityID

44126 33 火车

44127 10 UFL

44128 12 TOI

44129 33 未指定

44130 15 微软

44131 33 好处

44132 43 好处

表 2:

类别 ActivityID Categdesc

10 可计费

12 计费

15 不可计费

33 训练训练

33 未指定替补席

33 好处 好处

43 好处

预期输出:

44126 33 培训

44127 10 可计费

44128 12 可计费

44129 33 长凳

44130 15 不可计费

44131 33 福利

44132 43 福利

4

2 回答 2

1

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

select table1.empid, table1.category, table2.categdesc
from table1 join table2
on table1.activityID = table2.activityID;
于 2013-03-29T23:23:38.403 回答
1

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

我将您的表格命名如下。表 1 = EmpActivity 表 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 作业。下面是我得到的结果。

44127   10      billable
44128   12      billable
44130   15      Non-billable
44132   43      Benefits
44131   33      Benefits
44126   33      Training
44129   33      Bench
于 2013-03-31T10:14:31.450 回答