2012-10-25 6 views
2

여러 테이블을 조인해야합니다. 다음과 같이 내가 사용하고 명령은 다음과 같습니다돼지의 여러 테이블의 바깥 쪽 조인트

G = JOIN aa BY f FULL, bb by f, cc by f, dd by f; 

를하지만 나에게 mismatched input 오류 메시지를 제공합니다 :

G = JOIN aa BY f, bb by f, cc by f, dd by f; 

은 완전 외부 조인을 만들려면, 나는 그것을 만들기 위해 FULL을 추가했다. 이 작업을 어떻게해야합니까?

감사합니다. 돼지 documentation에 따르면

답변

6

:

외부 양방향 조인 만 작동합니다 조인; 다중 방향 외부 조인을 수행하려면 복수 양방향 외부 조인 문을 수행해야합니다.

+0

이 페이지는 내가 사용하고있는 것입니다. 인용하다. 해당 페이지의 "공통 필드 값에 따라 두 개 이상의 관계에 대한 외부 조인을 수행합니다"에 대한 Ctrl + F를 수행하십시오. 이것이 오타라고 생각하기 시작했습니다. – Navneet

+1

@Navneet : 전체 외부 조인 레코드는 일치하지 않는 경우에도 양측에서 가져옵니다. 문서에서는 완전 외부 조인 (fully outer join)이 3이 아닌 2 개의 측면을 기대한다고 명시합니다. 당신이 얻는 에러 메시지는 오해의 소지가 있습니다. 따라서, 돼지 소스 코드 : org.apache.pig.test.TestJoin # testMultiOuterJoinFailure()의http : // svn에있는 해당 junit 테스트 케이스를 검사하여이를 검증 할 수 있습니다. apache.org/repos/asf/pig/trunk/test/org/apache/pig/test/TestJoin.java –

1

COGROUP 문을 사용하면 완전 외부 조인을 모방 할 수 있습니다. 다음 두 개의 파일

에게

Decimal.csv

first|1 
second|2 
fourth|4 

Roman.csv를 사용하는 방법에 대한 예를 들어 cogroup를 들어

first|I 
second|II 
third|III 

돼지 명령 :

english = LOAD 'Decimal.csv' using PigStorage('|') as (name:chararray,value:chararray); 
roman = LOAD 'Roman.csv' using PigStorage('|') as (name:chararray, value:chararray); 
multi = cogroup english by name, roman by name; 
dump multi 

출력 :

(first,{(first,1)},{(first,I)}) 
(third,{},{(third,III)}) 
(fourth,{(fourth,4)},{}) 
(second,{(second,2)},{(second,II)}) 
관련 문제