2016-10-04 62 views
1

我有3個字段作爲豬的關係:如何使動態場PIG關係

A = Load 'record.txt' as (name chararray,ID int,subject chararray,flag boolean);<br> 
DUMP A; 

(RAM,222,JAVA,true) 
(RAM,111,DotNet,false) 
(RAM,444,HTML,false) 
(SAM,777,DotNet,true) 
(SAM,333,JAVA,false) 

如何產生額外的領域與姓名和ID的級聯參考, 當標誌爲true,否則它會如下圖所示:

(RAM,222,JAVA,true,RAM-222) 
(RAM,111,DotNet,false,RAM-222) 
(RAM,444,HTML,false,RAM-222) 
(SAM,777,DotNet,true,SAM-777) 
(SAM,333,JAVA,false,SAM-777) 

使用下面的腳本,但它沒有給出確切的結果。

A = Load 'demo.txt' as (name chararray,ID int,subject chararray,flag boolean); 
B = FOREACH A GENERATE name,ID,subject,flag,CONCAT(name,ID) As reference; 
DUMP B; 

(RAM,222,JAVA,true,RAM-222) 
(RAM,111,DotNet,false,RAM-111) 
(RAM,444,HTML,false,RAM-444) 
(SAM,777,DotNet,true,SAM-777) 
(SAM,333,JAVA,false,SAM-333) 

什麼應該是CONCAT函數或者其他任何方式來獲得確切的結果?

回答

1
A = Load 'demo.txt' as (name chararray,id int,sub chararray,flg boolean); 
B = FOREACH A GENERATE name,id,sub,flg,CONCAT(name,ID) As rf; 

split B into b1 if flg=='true', b2 if flg=='false'; 
C = join b2 by name left outer,b1 by name; 
C1 = foreach C generate b2::name as name,b2::id as id,b2::sub as sub,b2::flg as flg,b1::rf as rf; 

Result = union b1,C1; 

希望這會有所幫助!

+0

它工作正常。 – jay105