2014-01-07 46 views
0

我想下面的蜂巢語句轉換成豬:Convesion從蜂房到PigLatin

max(substr(case when url like 'http:%' then '' else url end,1,50)) 

我對上面的豬的說法是:

url_group = GROUP data by (uid); 
max_substr_url= FOREACH url_group generate SUBSTRING(MAX(((Coalesce(data.url) matches '.*http:%.*') ? '' : Coalesce(data.url))), 0, 49); 

對於一些數據,該網址可以爲null。所以我寫了一個名爲Coalesce(String)的豬UDF,如果數據爲null或爲空,它將返回一個空字符串。如果數據不爲空或不爲空,則返回字符串。

上述豬的聲明給了我很多麻煩,並嘗試了不同的選擇/方式,但沒有任何工作。任何人都有如何實現這個想法?請幫幫我。

在此先感謝

+2

「很麻煩」, 「毫無效果」 - 更具體 –

+0

豬用來'matches' java的正則表達式,所以'%不需要''中的HTTP *:%*'。另外,爲什麼你在豬中交換MAX和substring?它應該是'MAX(SUBSTRING ...' –

+0

嗯,我嘗試了很多方法讓我的豬語句工作,但沒有運氣.. – user3167832

回答

0

你將要使用nested FOREACH,這樣就可以在data袋做的每個元組的子改造再取轉化袋的MAX

A = GROUP data by (uid); 
B = FOREACH url_group { 
    -- MAX needs a one column bag 
    transformed = FOREACH data 
        GENERATE SUBSTRING((Coalesce(url) matches '.*http:.*' ? '' : Coalesce(url)), 0, 49); 
    GENERATE group AS uid, MAX(transformed) ; 
} 
+0

非常感謝答覆,並得到它的工作 – user3167832