Hadoop Hive — Разделить строку

Я новый куст.

Мой запрос: В файле журнала у нас есть поле запроса, подобное этому 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

Из этого поля ПОЛУЧИТЕ /img/home/search-user-ico.jpg HTTP/1.1, мне нужна только эта часть /img/home/search-user-ico.jpg, я хочу ее разделить из GET, POST и HTTP/1.1, поэтому, пожалуйста, помогите мне, как разделить это, используя строковые функции, доступные в вики. Я пробовал с некоторым синтаксисом, доступным в вики, но теперь я беспомощен.

я пробовал с таким синтаксисом,

выберите 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) из ​​файла журнала ограничение 10;

Спасибо -Джо


person user716460    schedule 20.04.2011    source источник


Ответы (1)


Я использовал RegexBuddy и образцы, которые вы предоставили, и получил только URL-адреса с этим регулярным выражением ([\S]*) HTTP Предполагается, что не будет буквального пробелы в URL-адресе, кодировка в порядке.

Включение его в запрос улья должно выглядеть примерно так

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

(Обратите внимание, что перед (\\S) есть пробел. Это может быть довольно очевидно, но я просто хотел прокомментировать это на случай, если его пропустили)

Я провел небольшое тестирование в улье, и оно работает, по крайней мере, с тестами, аналогичными предоставленным образцам.

person QuinnG    schedule 20.04.2011