2017-05-18 6 views
0

가입 후 열쇠를 어떻게 든 제거하는 것 같습니다.돼지 : 가입 후 필드가 존재하지 않습니다.

상황

목표는 오직 된 table_1 구별 회원 ID의 구성 table_2에서 모든 레코드를 얻는 것입니다.

초보자로서이 목표를 달성하기위한 모범 사례와 "왜곡 된 필드"오류가 발생하는 이유에 대한 의견을 보내 주시면 감사하겠습니다.

내가

-- assume %default vals set for path_1 and path_2 to data 

-- load the data 

table_1 = LOAD '$path_1' as (day, member_id, country); 
table_2 = LOAD '$path_2' as (day, member_id, country); 

-- get distinct member_id's from table_1 

table_1_ids = DISTINCT(FOREACH table_1 GENERATE member_id as member_id); 

-- get all records from table_2 that only have table_1_ids 

new_table_2 = JOIN table_1_ids BY member_id, table_2 BY member_id; 

오류

잘못된 필드 투영을 시도했다. 예상 필드 [member_id]이 (가) 스키마에 없습니다. table_1_ids :: member_id : bytearray, table_2 :: day : bytearray, table_2 :: member_id : bytearray, table_2 :: 국가 : bytearray.

+0

유용한 경우를 new_table_2 = table_2 [ – Quetzalcoatl

+0

Hi Quetzalcoatl, 내가 알아 차린 것 중 하나는 돼지 스크립트의 마지막 줄에 member_id가되어야하는 회원 ID입니다. -> new_table_2 –

+0

(영문 일 수 있음) 또한이 스크립트에서 별개의 방식으로 확인하십시오 -> table_1_ids –

답변

0

@piyush와 @ Nazar에게 감사드립니다. 원하는 결과를 얻을 수 한 가지 방법은 내가하는 것입니다) 고유에 참여 키 레이블 및 II)은 별개의 문 분리 :이처럼 간단 할 것 파이썬의 팬더의 :

table_1 = LOAD '$path_1' as (day, member_id_1, country); 
table_2 = LOAD '$path_2' as (day, member_id_2, country); 
all_table_1_ids = FOREACH table_1 GENERATE member_id_1 as member_id_1; 
distinct_table_1_ids = DISTINCT all_table_1_ids; 
new_table_2 = JOIN distinct_table_1_ids BY member_id_1, table_2 BY member_id_2; 
0

먼저 join 후에 스크립트를 제공하지 않았지만 generate 문이 있다고 가정합니다. 조인 후 모든 열의 이름이 <alias_name>::<field_name>으로 바뀝니다. 두 별칭에 같은 이름의 필드()가 있으므로 가입 후에는 단순한 이름으로 참조 할 수 없습니다. 그것의 전체 이름은 table_1_ids::member_id 또는 table_2::member_id이어야합니다 (이 값은 같은 값이지만 여전히 가입 결과에서 2 개의 다른 필드입니다). 희망이 도움이됩니다.

+0

감사합니다. :: 구문은이 경우에도 유용합니다. – Quetzalcoatl