跳转到主内容
跳转到主内容

url 表函数

url 函数根据给定的 formatstructure,基于指定的 URL 创建一个表。

url 函数可以在对 URL 表数据执行的 SELECTINSERT 查询中使用。

语法

url(URL [,format] [,structure] [,headers])

参数

参数描述
URL用单引号括起来的 HTTP 或 HTTPS 服务器地址,该服务器可以接受 GETPOST 请求 (分别对应 SELECTINSERT 查询) 。类型: String
format数据的格式。类型: String
structure表结构,格式为 'UserID UInt64, Name String'。用于确定列名和列类型。类型: String
headers请求头,格式为 'headers('key1'='value1', 'key2'='value2')'。可用于为 HTTP 调用设置请求头。

返回值

一个具有指定格式和结构,并包含来自已定义 URL 的数据的表。

示例

从以 CSV 格式响应的 HTTP 服务器获取一个包含 StringUInt32 类型列的表的前 3 行。

SELECT * FROM url('http://127.0.0.1:12345/', CSV, 'column1 String, column2 UInt32', headers('Accept'='text/csv; charset=utf-8')) LIMIT 3;

URL 向表中插入数据:

CREATE TABLE test_table (column1 String, column2 UInt32) ENGINE=Memory;
INSERT INTO FUNCTION url('http://127.0.0.1:8123/?query=INSERT+INTO+test_table+FORMAT+CSV', 'CSV', 'column1 String, column2 UInt32') VALUES ('http interface', 42);
SELECT * FROM test_table;

URL 中的通配模式

花括号 { } 中的模式用于生成一组分片,或用于指定故障转移地址。受支持的模式类型及示例请参见 remote 函数的描述。 模式中的字符 | 用于指定故障转移地址。故障转移地址会按照在模式中列出的顺序依次迭代。生成地址的数量受 glob_expansion_max_elements 设置的限制。

虚拟列

  • _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 会在路径 (/name=value/) 中检测 Hive 风格的分区,并允许在查询中将分区列作为虚拟列使用。这些虚拟列的名称与分区路径中的名称相同。

示例

使用通过 Hive 风格分区创建的虚拟列

SELECT * FROM url('http://data/path/date=*/country=*/code=*/*.parquet') WHERE date > '2020-01-01' AND country = 'Netherlands' AND code = 42;

解析相对 URL

url_base 设置允许向 url 函数传入相对 URL。当设置了 url_base,且函数参数是相对引用时,系统会按照 RFC 3986 基于基础 URL 对其进行解析。

解析规则如下:

  • 路径相对 (例如 data.csv) :与基础 URL 的路径合并——基础路径中最后一个 / 之后的所有内容都会被替换。末尾斜杠很重要: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) :使用基础 URL 的 scheme 和 host 进行解析。
  • scheme 相对 (例如 //other.com/test/data.csv) :使用基础 URL 的 scheme 进行解析。
  • 仅查询字符串 (例如 ?x=1) :附加到完整的基础路径上,并替换现有的查询字符串或片段。
  • 仅片段 (例如 #frag) :附加到基础 URL,并保留查询字符串,同时替换现有片段。
  • 空值:返回不带片段的基础 URL。
  • 绝对 URL:保持不变;会忽略 url_base

示例

SET url_base = 'https://raw.githubusercontent.com/ClickHouse/ClickHouse/master/';
SELECT * FROM url('tests/queries/0_stateless/data_csv/data.csv', CSV) LIMIT 3;

存储设置

  • url_base - 用于解析传递给 url 函数的相对 URL 的基础 URL。

权限

url 函数需要 CREATE TEMPORARY TABLE 权限。因此,对于将 readonly 设置为 1 的用户,它将无法使用。至少需要 readonly = 2。