2016-10-04 60 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