Hadoop Hive - 分裂字符串

时间:2011-04-20 05:07:04

标签: hive

我是一个新的hivebe。

我的查询:在日志文件中,我们有一个请求字段,如“GET /img/home/search-user-ico.jpg HTTP / 1.1”。有超过10,000条记录是可用。

示例:

“GET /img/home/search-user-ico.jpg HTTP / 1.1”
 “GET /JavaScript/jquery-1.4.2.min.js HTTP / 1.1”  “GET / ems / home HTTP / 1.1”  “POST / ir HTTP / 1.1”  “GET /CSS/jquery/themes/base/jquery.ui.button.css HTTP / 1.1”  “GET /CSS/jquery/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png HTTP / 1.1”
 “GET /JavaScript/jquery/jquery-ui-1.8.5.custom.min.js HTTP / 1.0”

从这个字段“GET /img/home/search-user-ico.jpg HTTP / 1.1”,我只想要这部分 /img/home/search-user-ico.jpg ,我想把它从GET,POST和HTTP / 1.1分开,所以请帮助我如何使用wiki中提供的字符串函数来分割它。我尝试了wiki中提供的一些语法。但是现在我很无奈。

我试过语法,

从日志文件限制10中选择regexp_extract(request,'a-zA-Za-zA-Z [a-zA-Z]',2);

从日志文件限制10中选择regexp_extract(request,'GET(\ s)([a-zA-Z])',2);

从日志文件限制10中选择regexp_extract(request,'。?(\ s)(。?)(\ s)(。*?)',2);

从日志文件限制10中选择regexp_extract(request,'。(\ s)(。)(\ s)(。*)',2);

由于 -Joe

1 个答案:

答案 0 :(得分:1)

我使用了RegexBuddy和您提供的示例,只获得了此正则表达式([\S]*) HTTP的网址 这假设URL中没有文字空格,编码很好。

将其插入到配置单元查询中应该类似于

select regexp_extract(request, ' (\\S*) HTTP', 1) from logfile;

(请注意,(\\S)之前有一个空格。这可能相当明显,但只是想对它进行评论以防错过)

我在蜂巢中进行了一些测试并且它正在运行,至少与所提供的样本类似的测试。