从Hive转换为Pig Latin

时间:2014-01-07 05:31:01

标签: hive apache-pig

我正在尝试将以下Hive语句转换为Pig:

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);

对于某些数据,url可以为null。所以我编写了一个名为Coalesce(String)的猪UDF,如果数据为null或为空,则返回一个空字符串。如果数据不为null或不为空,则返回字符串。

上面的猪声明给了我很多麻烦,尝试了不同的选择/方式,但没有任何效果。有人对如何实现这个有任何想法吗?请帮我。

提前致谢

1 个答案:

答案 0 :(得分: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) ;
}