2

私は新しい蜂の巣です。

My Query :ログ ファイルには、「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 で利用可能な構文のいくつかを試してみましたが、今は無力です。

私は次のような構文で試しました

logfile limit 10 から regexp_extract(request,'a-zA-Za-zA-Z[a-zA-Z]',2) を選択します。

logfile limit 10 から regexp_extract(request,'GET(\s)([a-zA-Z])',2) を選択します。

logfile limit 10 からregexp_extract(request,'. ?(\s)(. ?)(\s)(.*?)',2) を選択します。

logfile limit 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)ます。かなり明白かもしれませんが、見逃された場合に備えてコメントしたかっただけです)

ハイブで少しテストを行いましたが、少なくとも提供されたサンプルと同様のテストで機能しています。

于 2011-04-20T17:01:25.587 に答える