2013-03-29 5 views
0

다음과 같은 두 개의 테이블이 있습니다. 기본적으로 나는 그들 둘다에 가입하고 아래와 같은 결과를 기대합니다.하이브 : 다른 키로 두 개의 테이블 조인

표 2의 처음 3 행에는 아무것도없는 활동 ID가 없습니다.

모든 필드는 탭으로 구분됩니다. 카테고리 "33"은 표 2와 같이 세 가지 설명이 있습니다.

"33"카테고리에 대한 결과를 얻으려면 "활동 ID"를 사용해야합니다.이 값에는 3 가지 값이 있습니다.

누구나이 출력을 달성하는 방법을 알려주시겠습니까?

TABLE 1

EMPID 카테고리 ActivityID

44,126 33 TRAIN

44,127 10 UFL

44,128 12 TOI

44,129 33 UNASSIGNED

44,130 15 MICROSOFT

44,131 33 이점

44,132 43 이점

표 2 :

카테고리 ActivityID Categdesc

10 청구

12 청구

15 비 청구

33 TRAIN 교육

33 UNASSIGNED 벤치

(33) 혜택이

43 장점

혜택

예상 출력 :

44126 (33) 교육

44127 (10) 청구

나는 당신의 질문을 이해한다면 691,363,210

44128 (12) 청구

44129 (33) 벤치

44,130 15 비 청구

44,131 33 장점

44,132 43 장점

답변

1

많은 제한 사항이 있으므로이 하이브를 수행하기가 약간 어렵습니다. 이것이 내가 어떻게 해결 되었는가하지만 더 좋은 방법이있을 수있다.

아래 표와 같이 이름을 지정했습니다. 표 1 = EmpActivity 표 2 = ActivityMas

표 2의 null 필드로 인해 문제가 발생했습니다. 두 개의 서로 다른 쿼리의 결과를 결합하기 위해 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 
) 

상위 수준 명령문에서 UNION ALL을 직접 지원하지 않으므로 최상위 SELECT 절을 사용해야합니다. 총 3 개의 MR 작업이 실행됩니다. 아래에 제가 얻은 결과가 있습니다.

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

대단히 감사합니다. 나는 당신이 받고있는 동일한 대답을 얻을 수 있습니다. 그것은 비어와 함께 작동합니다. 제발 날 내게 보내 줄래? 처음 세 행이 activityid에 대해 "null/empty"대신 다른 문자열 인 경우 수행하는 방법을 알고 있습니다. 내 옆에서도 시도하고 있습니다. – Raj

+0

다른 값은 무엇입니까? – Rags

+0

다음과 같은 결과가 나타납니다. 보기 만들기 actView1 AS * 여왕에게서 선택 actid <> 'TRAIN'및 actid <> 'UNASSIGNED'및 actid <> 'BENEFITS'; 도와 주시고 시간을내어 주신 Rags와 Brenden Brown에게 감사 드리며 – Raj

1

잘 모르겠어요 또는 귀하의 데이터,하지만이 작동합니까?

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

감사합니다. 그것은 잘 작동하지만 예상 된 결과를 얻을 수 없습니다 :(. 넝마에서 답변 및 다른 비슷한 도움을 요청했습니다. – Raj

관련 문제