概述
本节提到的函数经过优化,可实现最高性能,但大多数情况下并不遵循 RFC-3986 标准。
实现 RFC-3986 的函数会在函数名后附加
RFC,并且通常速度较慢。@ 符号的公开注册域名时,通常可以使用非 RFC 函数变体。
下表详细列出了 URL 中哪些符号可以 (✔) 或不可以 (✗) 被相应的 RFC 和非 RFC 变体解析:
标有
* 的符号是 RFC 3986 中的子分隔符,允许用于 @ 符号后的用户信息。
URL 函数分为两类:
- 提取 URL 各部分的函数。如果 URL 中不存在相应部分,则返回空字符串。
- 移除 URL 某一部分的函数。如果 URL 中没有对应内容,则 URL 保持不变。
下方的函数由
system.functions 系统表生成。URLHierarchy
path 和查询字符串中,以 /、? 和 # 为分隔符从末尾逐级截断。连续的分隔符字符按一个计算。结果的第一个元素包含协议和主机,后续元素则通过逐步延长路径形成层级结构。
语法
url— 要处理的 URL。String
Array(String)
示例
基本用法
Query
Response
URLPathHierarchy
/、? 和 # 为截断符。与 URLHierarchy 不同,结果不包含协议和主机,而是从路径开始。连续的分隔符会视为一个。
语法
url— 要处理的 URL。String
Array(String)
示例
基本用法
Query
Response
cutFragment
url— URL。String
String
示例
使用示例
Query
Response
cutQueryString
url— URL。String
String
示例
使用示例
Query
Response
cutQueryStringAndFragment
url— URL。String
String
示例
使用示例
Query
Response
cutToFirstSignificantSubdomain
url— 要处理的 URL 或域名字符串。String
String
示例
用法示例
Query
Response
cutToFirstSignificantSubdomainCustom
url— 要处理的 URL 或域名字符串。Stringtld_list_name— 在 ClickHouse 中配置的自定义 TLD 列表的名称。const String
String
示例
对非标准域名使用自定义 TLD 列表
Query
Response
cutToFirstSignificantSubdomainCustomRFC
url— 按照 RFC 3986 处理的 URL 或域名字符串。 -tld_list_name— 在 ClickHouse 中配置的自定义 TLD 列表名称。
String
示例
用法示例
Query
Response
cutToFirstSignificantSubdomainCustomWithWWW
url— 要处理的 URL 或域名字符串。 -tld_list_name— 在 ClickHouse 中配置的自定义 TLD 列表名称。
String
示例
使用示例
Query
Response
cutToFirstSignificantSubdomainCustomWithWWWRFC
www。
接受自定义 TLD 列表名称。
如果你需要较新的 TLD 列表,或者使用自定义列表,此函数会很有用。
与 cutToFirstSignificantSubdomainCustomWithWWW 类似,但遵循 RFC 3986。
配置示例
url— 要按照 RFC 3986 处理的 URL 或域名字串。 -tld_list_name— 在 ClickHouse 中配置的自定义 TLD 列表名称。
www。String
示例
使用自定义 TLD 列表按 RFC 3986 解析并保留 www
Query
Response
cutToFirstSignificantSubdomainRFC
cutToFirstSignificantSubdomain 类似,但遵循 RFC 3986。
Syntax
url— 要按 RFC 3986 处理的 URL 或域名字符串。String
String
示例
使用示例
Query
Response
cutToFirstSignificantSubdomainWithWWW
www.。
与 cutToFirstSignificantSubdomain 类似,但如果存在 www. 前缀,则会保留它。
语法
url— 要处理的 URL 或域名字符串。String
String
示例
用法示例
Query
Response
cutToFirstSignificantSubdomainWithWWWRFC
cutToFirstSignificantSubdomainWithWWW 类似,但符合 RFC 3986。
语法
url— 按照 RFC 3986 处理的 URL 或域名字符串。
String
示例
用法示例
Query
Response
cutURLParameter
name 参数。
此函数不会对参数名称中的字符进行编码或解码,例如,Client ID 和 Client%20ID 会被视为不同的参数名称。
语法
url— URL。Stringname— URL 参数名。String或Array(String)
name URL 参数后的 URL。String
示例
用法示例
Query
Response
cutWWW
www. 开头,则将其移除。
语法
url— URL。String
www. 后的 URL。 String
示例
用法示例
Query
Response
decodeURLComponent
url— URL。String
String
示例
使用示例
Query
Response
decodeURLFormComponent
+ 号会转换为空格,百分号编码的字符也会被解码。
语法
url— URL。String
String
示例
使用示例
Query
Response
domain
url— URL。String
String
示例
用法示例
Query
Response
domainRFC
domain 类似,但遵循 RFC 3986 规范。
语法
url— URL。String
String
示例
使用示例
Query
Response
domainWithoutWWW
www.,则将其去除。
语法
url— URL。String
www.) ,则返回域名;否则返回空字符串。String
示例
使用示例
Query
Response
domainWithoutWWWRFC
www.,则返回去掉此前导部分的域名。与 domainWithoutWWW 类似,但符合 RFC 3986。
语法
url— URL。String
www.) ;否则返回空字符串。String
示例
使用示例
Query
Response
encodeURLComponent
url— URL。String
String
示例
用法示例
Query
Response
encodeURLFormComponent
url— URL。String
String
示例
使用示例
Query
Response
extractURLParameter
name 参数的值;如果不存在,则返回空字符串。
如果存在多个同名参数,则返回第一次出现的值。
该函数假定 url 参数中的该参数与 name 参数采用相同的编码方式。
语法
String
示例
用法示例
Query
Response
extractURLParameterNames
url— URL。String
Array(String)
示例
使用示例
Query
Response
extractURLParameters
name=value 字符串。
这些值不会被解码。
语法
url— URL。String
name=value 字符串。Array(String)
示例
使用示例
Query
Response
firstSignificantSubdomain
- 无。
Query
Response
firstSignificantSubdomainCustom
String
示例
基本用法
Query
Response
firstSignificantSubdomainCustomRFC
firstSignificantSubdomainCustom 类似,但它使用符合 RFC 3986 的 URL 解析方式,而不是简化算法。
语法
String
示例
基本用法
Query
Response
firstSignificantSubdomainRFC
- 无。
fragment
url— URL。String
String
示例
使用示例
Query
Response
netloc
username:password@host:port) 。
语法
url— URL。String
username:password@host:port。String
示例
用法示例
Query
Response
path
url— URL。String
String
示例
使用示例
Query
Response
pathFull
path 相同,但还包含 URL 的查询字符串和片段。
语法
url— URL。String
String
示例
使用示例
Query
Response
port
default_port。
语法
UInt16
示例
用法示例
Query
Response
portRFC
default_port。
与 port 类似,但符合 RFC 3986 规范。
语法
UInt16
示例
用法示例
Query
Response
protocol
url— URL。String
String
示例
使用示例
Query
Response
queryString
# 以及 # 之后的所有内容。
语法
url— URL。String
String
示例
用法示例
Query
Response
queryStringAndFragment
url— URL。String
String
示例
使用示例
Query
Response
topLevelDomain
URL 可以包含协议,也可以不包含协议。
例如:
url— URL。String
String
示例
用法示例
Query
Response
topLevelDomainRFC
引入版本:v22.10.0 从 URL 中提取顶级域名。 与topLevelDomain 类似,但遵循 RFC 3986。
语法
url— URL。String
String
示例
用法示例
Query
Response