2016-10-04 10 views
1

でダイナミックなフィールドを作るために、私は同様に3つのフィールドを持つ豚の関係があります。どのようPIG関係

名前とIDの連結で参照として追加フィールドを生成する方法
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) 

を、 フラグが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) 

正確な結果を得るには何が必要ですか?

答えて

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

関連する問題