Skip to main content
url 函数 使用给定的 format结构URL 创建表。 url 函数 可用于对 URL 表中的数据执行 SELECTINSERT 查询。

语法

参数

返回值

一个采用指定格式和结构、包含已定义 URL 中数据的表。

示例

从以 CSV 格式响应的 HTTP 服务器获取一个表的前 3 行,该表包含 StringUInt32 类型的列。
URL 中的数据插入到表中:

按 URL 协议分派

url 函数充当其他文件和对象存储表函数之上的统一包装层:它会根据 URL 协议分派到正确的后端。这样一来,你就可以用一套统一的语法,从任何受支持的位置读取数据。 只有那些无需额外配置、即可由 S3 URI mapper 解析为具体端点的 S3 协议 (s3,以及 gs/gcs/oss) 才会被分派。其他兼容 S3 的厂商协议 (cosobseos、…) 具有区域特定性,且没有默认端点映射,因此像 cos://… 这样的 URL 会被视为无法识别的协议并报错;对于这些后端,请直接使用 s3 函数 (并配置 url_scheme_mappers) 。 对于 file://,相对路径 (file://data.csv) 会在 user_files 目录内解析,而绝对路径 (file:///home/user/data.csv) 则仍必须像往常一样指向该目录内部。 formatstructurecompression_method 参数,以及 url_base 设置,无论分派目标是什么,其行为都相同。
协议分派尚未贯通到 urlCluster:传递给 urlCluster 的非 http(s) scheme 目前会报错并被拒绝。对于这些后端,请改用对应的集群函数 (s3ClusterazureBlobStorageClusterhdfsCluster 等) 。

URL 中的通配符

{ } 中的模式用于生成一组分片,或指定故障转移地址。支持的模式类型及示例,请参见 remote 函数说明。 模式中的 | 字符用于指定故障转移地址。系统会按模式中列出的顺序依次遍历这些地址。生成的地址数量受 glob_expansion_max_elements 设置限制。 有关 URL 路径中的通配符语法 (例如 *{a,b}{N..M}**) ,请参见 路径中的通配符。请注意,? 在 URL 中用于标识查询字符串的开始,因此不能在路径部分用作通配符。

结合 HTTP 索引页使用通配符

对于 urlURL 表引擎,ClickHouse 可以通过拉取 HTTP 索引页 (HTML 或纯文本) ,并从响应正文中提取 URL 来展开通配符。当服务器提供目录列表时,这使得 /**/ 之类的模式成为可能。 注意:
  • 相对 URL 会基于索引页的 URL 进行解析。
  • 在拉取索引页之前,会先展开 URL 模板,包括逗号分隔和数值范围的分片展开,以及路径组件之外的 | 故障转移选项。
  • 不支持在 HTTP 索引页展开中使用路径组件内的 | 故障转移模式。
  • 通配符匹配应用于 URL 的路径组件。
  • 如果列出的 URL 已包含查询字符串或片段,则以其为准,而不是使用源 URL 中的对应部分。否则,将使用源 URL 中的查询字符串和片段。
  • 允许列表为空;索引页返回 HTTP 错误 (例如 404) 时会引发异常。
  • 索引页的最大大小受 max_http_index_page_size 限制。
  • 递归展开期间可读取的最大目录数受 url_wildcard_max_directories_to_read 限制。
示例:

虚拟列

  • _pathURL 的路径。类型:LowCardinality(String)
  • _fileURL 的资源名。类型:LowCardinality(String)
  • _size — 资源大小 (以字节为单位) 。类型:Nullable(UInt64)。如果大小未知,则值为 NULL
  • _time — 文件的最后修改时间。类型:Nullable(DateTime)。如果时间未知,则值为 NULL
  • _headers - HTTP 响应头。类型:Map(LowCardinality(String), LowCardinality(String))

use_hive_partitioning 设置

use_hive_partitioning 设置为 1 时,ClickHouse 会检测路径中 Hive 风格的分区 (/name=value/) ,并允许在查询中将分区列作为虚拟列使用。这些虚拟列的名称将与分区路径中的名称相同。 示例 使用通过 Hive 风格分区生成的虚拟列

解析相对 URL

url_base 设置允许向 url 函数传入相对 URL。设置了 url_base 后,如果函数参数是相对引用,则会按照 RFC 3986 基于 base URL 对其进行解析。 解析规则如下:
  • 相对路径 (例如 data.csv) :与 base URL 的路径合并——base 路径中最后一个 / 之后的所有内容都会被替换。末尾斜杠很关键:https://example.com/dir/ + data.csv 会得到 https://example.com/dir/data.csv,而 https://example.com/dir + data.csv 会得到 https://example.com/data.csv。点分段 (./../) 会被归一化。
  • 相对主机 (例如 /test/data.csv) :使用 base URL 的 scheme 和主机进行解析。
  • 相对 scheme (例如 //other.com/test/data.csv) :使用 base URL 的 scheme 进行解析。
  • 仅查询字符串 (例如 ?x=1) :附加到完整的 base 路径,并替换现有的查询字符串或片段。
  • 仅片段 (例如 #frag) :附加到 base URL,保留查询字符串,并替换现有片段。
  • 空值:返回不带片段的 base URL。
  • 绝对 URL:保持原样传递;url_base 会被忽略。
示例

存储设置

权限

url 函数需要具备 CREATE TEMPORARY TABLE 权限。因此,对于设置了 readonly = 1 的用户,该函数无法使用。至少需要 readonly = 2。
最后修改于 2026年7月24日