PARSE_URL_TUPLE

功能概述

表函数,一次从 URL 中解析出多个部分(主机、路径、查询参数等),每个部分作为一列返回。需要从同一个 URL 取多个字段时,比多次调用 PARSE_URL 更简洁,URL 也只需解析一次。

语法

-- 在 SELECT 中直接调用 SELECT PARSE_URL_TUPLE(<url>, <part1> [, <part2> ...]) -- 配合 LATERAL VIEW 为每行展开 SELECT ... FROM <table> LATERAL VIEW PARSE_URL_TUPLE(<url>, <part1> [, <part2> ...]) <alias> AS <col1> [, <col2> ...]

参数说明

  • <url>
    <url>
    :STRING 类型,要解析的 URL。
  • <part>
    <part>
    :STRING 类型,要提取的部分,每个
    <part>
    <part>
    对应一个输出列。可以是常量,也可以是列。取值(大小写敏感,须大写):
part含义以
http://user:pass@example.com:8080/path/to?a=1&b=2#ref
http://user:pass@example.com:8080/path/to?a=1&b=2#ref
为例
PROTOCOL
PROTOCOL
协议,统一转为小写
http
http
HOST
HOST
主机名
example.com
example.com
PATH
PATH
路径
/path/to
/path/to
QUERY
QUERY
完整查询串
a=1&b=2
a=1&b=2
QUERY:<key>
QUERY:<key>
查询串中指定参数的值
QUERY:a
QUERY:a
→
1
1
REF
REF
锚点(
#
#
之后的部分)
ref
ref
FILE
FILE
路径加查询串
/path/to?a=1&b=2
/path/to?a=1&b=2
AUTHORITY
AUTHORITY
用户信息、主机和端口
user:pass@example.com:8080
user:pass@example.com:8080
USERINFO
USERINFO
用户信息
user:pass
user:pass

某个部分不存在时,该列返回 NULL。

使用示例

一次解析多个部分:

SELECT parse_url_tuple( 'http://user:pass@example.com:8080/path/to?a=1&b=&a1=regex#ref', 'HOST', 'PATH', 'QUERY', 'REF', 'PROTOCOL', 'AUTHORITY', 'USERINFO', 'QUERY:a');

c0c1c2c3c4c5c6c7
example.com/path/toa=1&b=&a1=regexrefhttpuser:pass@example.com:8080user:pass1

QUERY:a
QUERY:a
只匹配参数名完全等于
a
a
的参数,不会匹配
a1
a1
。

配合

LATERAL VIEW
LATERAL VIEW
解析表中的每一行,并为输出列命名:

SELECT url, host, path, id FROM VALUES ('https://example.com/p?id=42'), ('https://shop.example.com/item?id=7&from=ad') AS t(url) LATERAL VIEW parse_url_tuple(url, 'HOST', 'PATH', 'QUERY:id') parsed AS host, path, id;

urlhostpathid
https://example.com/p?id=42example.com/p42
https://shop.example.com/item?id=7&from=adshop.example.com/item7

注意事项

  • <part>
    <part>
    必须大写,如
    'HOST'
    'HOST'
    。
  • 只解析单个查询参数时,
    PARSE_URL(url, 'QUERY', 'key')
    PARSE_URL(url, 'QUERY', 'key')
    更直接。
  • 不带
    LATERAL VIEW
    LATERAL VIEW
    调用时,输出列名为
    c0
    c0
    、
    c1
    c1
    ……,需要自定义列名时用
    LATERAL VIEW ... AS
    LATERAL VIEW ... AS
    。

相关文档

联系我们
预约咨询
微信咨询
电话咨询
邮件咨询