Skip to main content
本页不适用于 ClickHouse Cloud。本文档介绍的功能不适用于 ClickHouse Cloud 服务。 更多信息,请参阅 ClickHouse 的 Cloud Compatibility 指南。
ClickHouse 的 s3 表函数和 S3 磁盘类型兼容 SeaweedFS。SeaweedFS 是一款带有兼容 S3 网关的开源分布式对象存储。SeaweedFS 原生支持路径样式请求,因此自托管存储无需通配符 DNS 即可运行。SeaweedFS 还支持 Iceberg 表:其表存储桶将表数据存储为 Parquet 文件,内置的 Iceberg REST catalog 提供表元数据。有关如何通过同一端点查询这些表,请参阅 SeaweedFS catalog 指南 请使用 SeaweedFS 4.42 或更高版本。较早版本中,如果对象的写入在其父文件夹因为空而被删除时提交,该对象可能会被删除;这会在写入成功后立即表现为 Object ... suddenly disappeared

在本地运行 SeaweedFS

如需进行本地测试,请创建一个包含 S3 凭据的 s3config.json 文件:
然后在单个容器中启动整个 SeaweedFS 技术栈;-bucket 标志会在启动时创建存储桶:
S3 端点监听 8333 端口;请等待其响应后再继续:
可随时使用 echo "s3.bucket.create -name mybucket" | docker exec -i seaweedfs weed shell 创建更多存储桶。 默认情况下,写入操作一旦交给操作系统便会被确认。若要在确认写入前将每次写入 fsync 到磁盘,请为存储桶启用 fsync:

以 S3 为后端的 MergeTree

只需进行少量修改,即可兼容以 S3 为后端的 MergeTree 配置:
该端点包含存储桶名称 (clickhouse) 以及表数据的路径前缀 (tables/) 。SeaweedFS 不需要区域,因此该标签可留空。请将 seaweedfs 替换为运行 S3 网关的主机。
随后,表将通过存储策略把数据存储在 SeaweedFS 中:
若要在本地缓存常用数据,请改用 SETTINGS disk = 's3_cache' 创建表——上文定义的缓存磁盘以 S3 磁盘为底层存储。

s3 表函数

s3 表函数通过同一端点读取和写入对象:
Glob 模式可用于读取多个对象。

备份与恢复

BACKUPRESTORE 支持将 SeaweedFS 端点用作 S3 目标端:
最后修改于 2026年8月18日