2

我是一个新的蜂巢。

我的查询:在日志文件中,我们有一个像这样的请求字段“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);

谢谢-乔

4

1 回答 1

1

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

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

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

(请注意,前面有一个空格(\\S)。这可能相当明显,但只是想评论一下,以防遗漏)

我在 hive 中做了一些测试,它正在工作,至少与提供的样本类似的测试。

于 2011-04-20T17:01:25.587 回答