我正在尝试将以下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或不为空,则返回字符串。
上面的猪声明给了我很多麻烦,尝试了不同的选择/方式,但没有任何效果。有人对如何实现这个有任何想法吗?请帮我。
提前致谢
答案 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) ;
}