在进行数据分析时,尤其要对网页进行分析时,我们往往要对其中部分的数据进行抽取,这个就需要靠hive的函数来完成了。
1.split函数
首先要讲的是split函数,这个函数的作用是对字符窜进行分割,基本用法为:split(string str, string pat) ,返回值为一个数组array,因此要取值得话需要用到切片,即[数字],其中第一个str是要切分的字符串,第二个pat是以什么字符进行切割。来看案例吧。
hive> select split('abcdef', 'c') ;
OK
["ab","def"]
Time taken: 8.071 seconds, Fetched: 1 row(s)
--只取第一部分
hive> select split('abcdef', 'c') [0];
OK
ab
Time taken: 5.326 seconds, Fetched: 1 row(s)
有的时候切割不是一下就能完成,那么就多去嵌套几次split就好了。
2.substr函数
返回字符串从某个位置开始固定长度的子串,和substring功能相同,基本用法为substr(string A, int start, int len ),还是来看例子。值得注意的是,substr(str,0,2)和substr(str,1,2)的功能都是一样的,都是从第一个位置开始。
hive> select substr('abcde',1,2);
OK
ab
Time taken: 0.086 seconds, Fetched: 1 row(s)
hive> select substr('abcde',0,2);
OK
ab
Time taken: 0.089 seconds, Fetched: 1 row(s)
3.parse_url函数
这个函数是个神器,可以解析url结构,返回我们想要的东西。基本用法为parse_url(string urlString, string partToExtract [, string keyToExtract]),其中partToExtract的有效值包括HOST,PATH, QUERY, REF, PROTOCOL, AUTHORITY,FILE和USERINFO等,具体我就不一一解释了,大家使用时可以自行百度。重点说一下,当第二个参数是QUERY时,第三个参数就可以使用了,这个是参数提取最有用的方法了,还是以案例来说明。
hive> select parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1',
> 'QUERY', 'k1');
OK
v1
Time taken: 0.428 seconds, Fetched: 1 row(s)
hive>
4.regexp_extract函数
这个函数是最终的大杀器了,以上都解决不了你的问题的时候,有了这个一切都可以解决,使用这个函数的基础是正则表达式基础要会一些。这个函数的基本用法是regexp_extract(string subject, string pattern, int index),第一个参数是待处理的字符串,第二个参数是写好的正则,第三个表达式一般用不上可以忽略掉。来看例子:
hive> select regexp_extract(split(split('https://m.baidu.com.cn/7874','baidu.com.cn/')
[1],'/')[0],'\\d+',0);
OK
7874
Time taken: 0.059 seconds, Fetched: 1 row(s)
有了以上函数,相信应该能满足大家对于hive进行字符串提取的一切要求了。