2012-09-28 38 views
1

雖然實施解決方案提供的How to optimize a group by statement in PIG latin?我發現有一個空列的所有行都被刪除,這是Pig中的預期行爲。我想知道下面的代碼是否可以工作?豬加入空值

A = B join by (Bcol1 is null?'UNK',Bcol2 is null?'UNK',Bcol2 is null?999), 
C join by (Ccol1 is null?'UNK',Ccol2 is null?'UNK',Ccol2 is null?999) 

我得到一些解析錯誤。

回答

3

PIG是一種數據流腳本語言,並增加了額外的FOREACH GENERATE,它修復了null,不會導致額外的map reduce任務。

B = foreach B generate ....., (Bcol1 is null) ? 'UNK' : Bcol1 as Bcol1, (Bcol2 is null) ? 'UNK' : Bcol2 as Bcol2, (Bcol3 is null) ? 999 : Bcol3; 
C = foreach C generate ....., (Ccol1 is null) ? 'UNK' : Ccol1 as Ccol1, (Ccol2 is null) ? 'UNK' : Ccol2 as Ccol2, (Ccol3 is null) ? 999 : Ccol3; 
A = join B by (Bcol1, Bcol2, Bcol3), C by (Ccol1, Ccol2, Ccol3); 
+0

感謝您迴應Alexejpab,我沒有實現我的身邊同樣的方式,但唯一的缺點是,它會本質上是價值從零更改爲某個確定的值,這可能表現爲價值..但我因爲在連接中沒有NVL功能..所以要走.. – Vivek

+0

您可以隨時將「(Bcol1爲空)?UNK':Bcol1作爲JOIN_Bcol1」,因此您可以使用更改的空值複製列並在加入後丟棄它們 – alexeipab