2013-08-08 4 views
1

У меня есть два наборов данныхРегистрации в Свинье и создать новый столбец

Definition of schema A - Name, city, state 
A= { 
    Ram, Sunnyvale, CA 
    Soju, Austin,  TX 
    Rathos, Bangalore, Karnataka 
    Mike, Portland, OR 
} 

B = { 
    Ram, Refund 
    Soju, Refund 
} 

Я хотел бы присоединиться к этим две таблице, основанной на состоянии и имеет выход следующего

Schema Definition - Name,City,State,RefundIssued (Yes/No) 
    Ram,Sunnyvale,CA,yes 
    Soju,Austin,TX,yes 
    Rathos,Bangalore,Karnataka,no 
    Mike,Portland, OR,no 

Я не уверен в том, как определить, что мне нужно дополнительный столбец и который идет по логике

A = load 'data1.txt' using PigStorage(',') as (name: chararray,city: chararray,state: chararray); 
B= load 'data2.txt' using PigStorage(',') as (name: chararray,type: chararray); 
C = join A by name LEFT OUTER,B by name; 
D = foreach C generate A::name as firstname,B::type as charge_type; 
--how to add new column which goes on refund issued as yes /no 
store D into '1outdata.txt'; 

ответ

3
A = load 'data1.txt' using PigStorage(',') as (name: chararray,city: chararray,state: chararray); 
B= load 'data2.txt' using PigStorage(',') as (name: chararray,type: chararray); 
C = join A by name LEFT OUTER,B by name; 
D = foreach C generate A::name as name , A::city as city, A::state as state, (B::type == 'Refund' ? 'True' : 'False') as RefundIssued 

Обратите внимание, что RefundIssues может быть «истинным», «ложным» или «нулевым» из-за того, как работает bincond. Если вы хотите, чтобы нуль (левое соединение не обнаружило совпадения или значение поля равно нулю) для перевода в значение false, используйте:

E = foreach D generate name , city, state, (RefundIssued IS NULL ? 'False' : RefundIssued) as RefundIssued