2013-08-29 76 views
1

比方說,我有關係的如何使用關係來過濾GROUP?

DUMP A; 
(a) 
(d) 
(g) 

現在我想用A的價值觀來篩選G組:

DUMP G; 
(a, {(a,b), (a,c)}) 
(c, {(c,d), (c,x)}) 
(d, {(d,b), (d,e)}) 

...這樣的結果將是

(a, {(a,b), (a,c)}) 
(d, {(d,b), (d,e)}) 

然後我想提取要生成的組:

(a,b) 
(a,c) 
(d,b) 
(d,e) 

我嘗試了以下的濾波部分,但它沒有工作:

J = JOIN G BY group, A BY a1; 
R = FOREACH (FILTER J BY J::group == A::a1) 
    GENERATE FLATTEN(J.group); 

回答

1

如果我正確理解你的問題,中J輸出應該已經是你想要的。默認JOIN是內部連接,因此c不會出現在A中,因此它不會包含在J的輸出中。如果你傾倒J你應該看到:

(a, {(a,b), (a,c)}, a) 
(d, {(d,b), (d,e)}, d) 

(或用變量的位置類似的東西交換)

FLATTEN在袋子外面,你需要做的是這樣:

R = FOREACH J GENERATE FLATTEN(G::FOO) ; 

在這種情況下FOO是您在GROUP上執行的關係的名稱。你可以用DESCRIBE G ;來驗證它的名字。