##はじめに
アクセスログの解析を行う上でURLから一部だけ抽出する処理ががよくあるので、
その場合に利用できるHIVE、Prestoの関数と利用例をまとめてみました
##HIVEとPrestoそれぞれで使える関数
HIVEは、parse_url
Prestoは、url_extract_***
が関数として用意されている
##HIVE
parse_url(string urlString, string partToExtract [, string keyToExtract])
第一引数にURL、第二引数に抽出したい箇所を入力する
第三引数は特定のクエリパラメータだけを抽出したいときに利用する
第二引数に指定できるのは、
HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, USERINFO
の8つ
URL:http://user:password@example.com:8888/index.html?query1=aaa&query2=bbb#hash
に対して実行した場合
SELECT
t1.URL,
parse_url(t1.URL,'HOST') as HOST,
parse_url(t1.URL,'PATH') as PATH,
parse_url(t1.URL,'QUERY') as QUERY,
parse_url(t1.URL,'QUERY','query1') as QUERY1,
parse_url(t1.URL,'REF') as REF,
parse_url(t1.URL,'PROTOCOL') as PROTOCOL,
parse_url(t1.URL,'AUTHORITY') as AUTHORITY,
parse_url(t1.URL,'FILE') as FILE,
parse_url(t1.URL,'USERINFO') as USERINFO
FROM
(SELECT 'http://user:password@example.com:8888/index.html?query1=aaa&query2=bbb#hash' as URL) t1
↓ 実行結果
Column | Value |
---|---|
URL | http://user:password@example.com:8888/index.html?query1=aaa&query2=bbb#hash |
HOST | example.com |
PATH | /index.html |
QUERY | query1=aaa&query2=bbb |
QUERY1 | aaa |
REF | hash |
PROTCOL | http |
AUTHORITY | user:password@example.com:8888 |
FILE | /index.html?query1=aaa&query2=bbb |
USERINFO | user:password |
##Presto
url_extract_host(string urlString)
url_extract_fragment(url)
url_extract_path(url)
url_extract_port(url)
url_extract_protocol(url)
url_extract_query(url)
url_extract_parameter(url, name)
##例えば
サイト内検索クエリを抽出したい場合
■HIVE
parse_url('http://example.com/search?q=book&page=1','QUERY','q')
→ book
■Presto
url_extract_parameter('http://example.com/search?q=book&page=1','q')
→ book
##参考
LanguageManual UDF — Hive Operators and User-Defined Functions (UDFs)
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
6.18. URL Functions — Presto 0.187 Documentation
https://prestodb.io/docs/current/functions/url.html