2012-07-30 34 views
0

我是豬和哈多普的新手。我需要從一個公共列上的多個表中選擇和分組行(但它不是聯結)。阿帕奇豬:從多個表中選擇不加入的共同列

例如,如果表1:

adv1,app1,adg1,camp1 
adv2,app3,adg2,camp2 

和表2是:

adv1,app2,adg2,camp1 
adv3,app1,adg3,camp3 
adv1,app1,adg4,camp2 

話,我想是這樣的:

adv1,app1,adg1,camp1 
adv1,app2,adg2,camp1 
adv1,app1,adg4,camp2 

回答

1

我想你想要什麼do加載兩個表,然後執行filter操作。

如果你有一個名爲table1文件有內容

adv1,app1,adg1,camp1 
adv2,app3,adg2,camp2 

和文件table2有內容

adv1,app2,adg2,camp1 
adv3,app1,adg3,camp3 
adv1,app1,adg4,camp2 

那麼你就可以做到以下幾點:

T = load '{/path/to/table1,/path/to/table2}' using PigStorage(',') 
     as (adv:chararray, app:chararray, adg:chararray, camp:chararray); 
result = filter T by adv == 'adv1'; 

> dump result 
(adv1,app2,adg2,camp1) 
(adv1,app1,adg4,camp2) 
(adv1,app1,adg1,camp1) 

另外,如果你有兩個你沒有從a加載的關係文件,您可以使用union來合併它們,然後進行過濾。

> dump T1 
(adv1,app1,adg1,camp1) 
(adv2,app3,adg2,camp2) 
> dump T2 
(adv1,app2,adg2,camp1) 
(adv3,app1,adg3,camp3) 
(adv1,app1,adg4,camp2) 

T = union T1, T2; 
result = filter T by adv == 'adv1'; 

此外,如果您是根據所有可能的密鑰試圖組,不只是ADV1,那麼你可以做一個group,而不是最後一行的過濾器。

result = group T by adv; 

> dump result 
(adv1,{(adv1,app1,adg1,camp1),(adv1,app2,adg2,camp1),(adv1,app1,adg4,camp2)}) 
(adv2,{(adv2,app3,adg2,camp2)}) 
(adv3,{(adv3,app1,adg3,camp3)}) 
+0

非常感謝:) – 2012-08-01 08:50:04