文章目录
1. 概述
URL的基本组成:4部分
hive有专门的函数来获取一个url的 protocol
、host
、path
、query
。分别是:
parse_url(url, protocol | host | path | query[, key])
:一次只能获取url组成部分中的一个parse_url_tuple(url, part1, part2, ....)
:一次能获取url组成部分中的多个组成部分
2. parse_url() (不推荐使用)
2.1 概述
-
parse_url()函数是UDF,即 输入一行数据,输出一行数据。
-
缺点:一次只能获取url组成部分中的一个
2.2 例子
- 例子:
①tb_url
表数据:
② 获取url的host, path, query:
③ 结果select id, parse_url(url,"HOST") as host, parse_url(url,"PATH") as path, parse_url(url,"QUERY") as query from tb_url;
2.3 一个注意点
如果是获取url
的query
某参数的值,可以直接在后面加上该参数名。比如:
SELECT parse_url('http://facebook.com/path/p1.php?id=10086&name=allen', 'QUERY', 'name') ;
3. parse_url_tuple() (推荐使用)
3.1 概述
-
parse_url_tuple()函数是UDTF。
-
优点:一次能获取url组成部分中的多个组成部分
3.2 例子
- 例子:
①tb_url
表数据:
② 获取url的host, path, query:
③ 结果select parse_url_tuple(url,"HOST","PATH","QUERY") as (host,path,query) from tb_url;
3.3 一个注意点
虽然parse_url_tuple()是输入一行,输出一行,但是其属于UDTF。而对于UDTF是不能直接查询表字段的,要使用侧视图才行。
-- 错误例子:id是表字段,不能出现
select
id,
parse_url_tuple(url,"HOST","PATH","QUERY") as (host,path,query)
from tb_url;
-- 正确例子:表字段要出现,必须使用侧视图
select
a.id as id,
b.host as host,
b.path as path,
b.query as query
from tb_url a lateral view parse_url_tuple(a.url, "host", "path", "query") b as (host, path, query);