2012-01-09 1 views
1

apache pig에서 하위 쿼리 작성에 대한 도움말을 찾고 있습니다.sub query in apache pig

A 
sam 12 grad maths 
sony 13 postgrad english 

B 
maths {(4.5,sam),(4,david)} 
english {(4.2,peter),(3.9,rob)} 

B.에 의해 두 A. $ × 3 주제, 즉 (a)에 의해 관계와 B $ 0 가입으로 출력을 줄 것이다 쿼리를 작성해야 - -

sam 12 grad maths 4.5 
sony 13 postgrad english 
를 예를 들어 나는 아래의 두 관계를 가지고

기본적으로 B에서 일치하는 제목을 확인한 다음 이름을 찾습니다.

C = FOREACH B GENERATE $0, FLATTEN($1); 

이것은으로 날짜를 변환합니다

답변

2

나는이 flattenB 관계입니다 접근하는 방법과, 다음의 관계를 평평하게,

먼저 A.에 왼쪽 외부 조인을 : 이제

maths, 4.5, sam 
maths, 4, david 
english, 4.2, peter 
english, 3.9, rob 

, 당신은 단지 함께 데이터를 가져올 수있는 JOIN을 수행 할 수 있습니다 (I 내 머리 straig을 유지하기 위해이 물건의 이름을 변경하고있어 HT) :

J = JOIN A BY (Aname, Asubject), C BY (Bname, Bsubject); 
J2 = FOREACH J GENERATE Astudent, Agrade, Alevel, Asubject, Bscore; 

dump J2 출력됩니다 만 sam, 12, grad, maths, 4.5.

그러나 문제가 있습니다. 목록 A의 항목이 목록 B에 표시되지 않는 경우 NULL 값을 갖고 싶어합니다. LEFT OUTER join에 대한 작업이며, 운 좋게도 Pig can do outer joins입니다. 여기

J = JOIN A BY (Aname, Asubject) LEFT OUTER, C BY (Bname, Bsubject); 
J2 = FOREACH J GENERATE Astudent, Agrade, Alevel, Asubject, Bscore; 

dump J2 내가 당신을 생각하는 것입니다 출력은, 원할 것입니다

: 다음과 같이 위의 코드를 수정

sam, 12, grad, maths, 4.5 
sony, 13, postgrad, english,