记录一个Pig字符串截取的实战小例子:
需求以下,从下面的字符串里提取出第2列(冒号后面)的值:
java
1 2 3 4 a:ab#c#d a:c#c#d a:dd#c#d a:zz#c#d
若是是在java里,方法可能有不少种,好比substring,或者split屡次等,在pig也大体如此,能够使用SUBSTRING内置函数来完成,但散仙推荐使用下面的方式,这种方式比较灵活,适合大部分场景的数据提取,须要用到的2个函数以下:
(1)REGEX_EXTRACT('原始字符串','正则式',int类型的返回索引)
(2)STRSPLIT('原始字符串', '正则式', 限制返回的个数)
pig脚本写法:
函数
a = laod '/tmp/data' as (data:chararray) //注意逻辑是,先获取冒号后面的数据,而后split成tuple,再经过$1(下标访问元素)获取咱们须要的数据便可。 b = foreach a generate STRSPLIT (REGEX_EXTRACT (data, '(.*):(.*)', 2) ,'#',5).$0; dump b;