SQL 方言通

首页 / 字符串

PARSE_URL 解析 URL

PARSE_URL 从 URL 中取出 HOST、PATH、QUERY 等部分。MaxCompute、Hive、Spark 和 Flink 支持第三个参数,可以直接取某个查询参数;StarRocks 和 Doris 只接受两个参数。无效 URL 的处理也不同,MaxCompute 和 StarRocks 会报错。

各引擎写法 · 迁移注意事项 · 示例

各引擎写法

引擎支持写法说明依据
MaxCompute支持PARSE_URL(url, part[, key])part 可取 HOST、PATH、QUERY、REF、PROTOCOL、AUTHORITY、FILE、USERINFO。无效 URL 会报错。官方文档
Hologres不支持—Hologres 字符串函数文档中没有找到 PARSE_URL,需要在实例中确认。待核实
StarRocks支持parse_url(expr1, expr2)只有两个参数,QUERY 不能直接取某个参数值。part 区分大小写,无效 URL 会报错。官方文档
Doris支持PARSE_URL(url, name)只有两个参数,name 不区分大小写,另外支持 PORT。name 取值非法时报错。官方文档
Hive支持parse_url(urlString, partToExtract[, keyToExtract])第三个参数可以取 QUERY 中某个键的值。批量取多个部分可以用 parse_url_tuple。官方文档
Spark SQL支持parse_url(url, partToExtract[, key])Spark 4 默认开启 ANSI,URL 无法解析时会报错;try_parse_url 在这种情况下返回 NULL。官方文档
Flink SQL支持PARSE_URL(string1, string2[, string3])第三个参数可以取 QUERY 中某个键的值,任一参数为 NULL 时返回 NULL。官方文档

迁移注意事项

示例

从页面地址中取出域名和来源参数

MaxCompute
SELECT PARSE_URL(page_url, 'HOST') AS host, PARSE_URL(page_url, 'QUERY', 'utm_source') AS source FROM page_views;
StarRocks
SELECT parse_url(page_url, 'HOST') AS host, regexp_extract(parse_url(page_url, 'QUERY'), 'utm_source=([^&]*)', 1) AS source FROM page_views;
Doris
SELECT parse_url(page_url, 'HOST') AS host, regexp_extract(parse_url(page_url, 'QUERY'), 'utm_source=([^&]*)', 1) AS source FROM page_views;
Hive
SELECT parse_url(page_url, 'HOST') AS host, parse_url(page_url, 'QUERY', 'utm_source') AS source FROM page_views;
Spark SQL
SELECT try_parse_url(page_url, 'HOST') AS host, try_parse_url(page_url, 'QUERY', 'utm_source') AS source FROM page_views;
Flink SQL
SELECT PARSE_URL(page_url, 'HOST') AS host, PARSE_URL(page_url, 'QUERY', 'utm_source') AS source FROM page_views;

同类函数

字符串:全部引擎写法对照

核对日期: · 提交勘误