跳到主要内容
跳到主要内容

URL 表引擎

查询数据到/从远程 HTTP/HTTPS 服务器。此引擎类似于 File 引擎。

语法: URL(URL [,Format] [,CompressionMethod])

  • URL 参数必须符合统一资源定位符的结构。指定的 URL 必须指向一个使用 HTTP 或 HTTPS 的服务器。这不需要任何额外的头部以获取服务器的响应。

  • Format 必须是 ClickHouse 可以在 SELECT 查询和(如有必要)INSERT 中使用的格式。有关支持的格式的完整列表,请参见 Formats

    如果未指定此参数,ClickHouse 将根据 URL 参数的后缀自动检测格式。如果 URL 参数的后缀与任何支持的格式不匹配,则无法创建表。例如,对于引擎表达式 URL('http://localhost/test.json'),应用 JSON 格式。

  • CompressionMethod 指示 HTTP 正文是否应被压缩。如果启用压缩,由 URL 引擎发送的 HTTP 数据包将包含 'Content-Encoding' 头部,以指示所使用的压缩方法。

要启用压缩,请首先确保 URL 参数所指示的远程 HTTP 端点支持相应的压缩算法。

支持的 CompressionMethod 应为以下之一:

  • gzip 或 gz
  • deflate
  • brotli 或 br
  • lzma 或 xz
  • zstd 或 zst
  • lz4
  • bz2
  • snappy
  • none
  • auto

如果未指定 CompressionMethod,则默认为 auto。这意味着 ClickHouse 会自动从 URL 参数的后缀检测压缩方法。如果后缀与上述列出的任何压缩方法匹配,则应用相应的压缩,或者不会启用任何压缩。

例如,对于引擎表达式 URL('http://localhost/test.gzip'),应用 gzip 压缩方法,但对于 URL('http://localhost/test.fr'),不启用压缩,因为后缀 fr 不匹配上述任何压缩方法。

使用方法

INSERTSELECT 查询分别转换为 POSTGET 请求。处理 POST 请求时,远程服务器必须支持 Chunked transfer encoding

您可以使用 max_http_get_redirects 设置来限制最大 HTTP GET 重定向跳数。

示例

1. 在服务器上创建一个 url_engine_table 表:

2. 使用标准 Python 3 工具创建一个基本的 HTTP 服务器并启动:

3. 请求数据:

实现细节

  • 读取和写入可以并行进行
  • 不支持:
    • ALTERSELECT...SAMPLE 操作。
    • 索引。
    • 复制。

虚拟列

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

存储设置