配置ClickHouse对接OBS源文件
操作场景
在大数据分析场景中,OBS作为海量数据的存储底座,ClickHouse需要直接读取OBS上的数据文件进行分析处理,避免数据搬迁带来的时间成本和存储冗余。当您需要在ClickHouse中查询存储在OBS上的数据文件,或将ClickHouse查询结果写入OBS时,可通过S3协议实现ClickHouse与OBS的对接。
ClickHouse通过兼容S3协议访问OBS中的数据文件。ClickHouse提供了两种对接OBS的方式:
- S3表函数:在SQL查询中通过S3()函数直接引用OBS文件路径,无需预先创建表结构。适用于临时查询、数据探索等场景,每次查询时直接访问OBS文件,不持久化元数据。
- S3表引擎:通过CREATE TABLE语句将OBS文件映射为ClickHouse的持久化表,表结构定义保存在ClickHouse中。适用于需要频繁访问同一OBS路径的场景,后续查询可直接引用表名,无需重复指定文件路径和格式。
两种方式的核心区别如下:
| 对比项 | S3表函数 | S3表引擎 |
|---|---|---|
| 使用方式 | 在SELECT语句中直接调用。 | 需先CREATE TABLE再查询。 |
| 元数据持久化 | 否,每次查询需指定完整参数。 | 是,表结构保存在ClickHouse中。 |
| 适用场景 | 临时查询、数据探索。 | 频繁访问、定期查询。 |
| 查询便捷性 | 每次需输入完整路径和格式。 | 直接使用表名查询。 |
前提条件
已将ClickHouse需要读取的表数据文件上传至OBS文件系统,具体请参考创建并行文件系统。
已安装ClickHouse客户端,例如客户端安装目录为“/opt/client”。详细操作请参考安装MRS客户端。
使用S3表函数对接OBS
- 获取OBS文件路径。 登录OBS服务管理控制台,在左侧导航栏单击“并行文件系统”,在“并行文件系统”页面单击对应的文件系统名称,在“文件”页面单击文件名称,获取前提条件上传的数据文件详细路径。图1 文件路径
- 使用ClickHouse客户端连接到ClickHouse服务端,具体请参考ClickHouse客户端使用实践。
- 执行以下命令获取OBS内的存储数据。
select * from S3(path, [ak, sk,] format, structure, [compression])
表1 参数解释 参数
说明
path
OBS文件路径,获取方法请参考1。
ak/sk
参数可选,具备访问OBS权限的AK/SK,获取方法请参考如何获取访问密钥AK/SK。
format
数据文件格式。常见的格式包括 CSV, Parquet, ORC, JSON 等。
structure
数据文件的结构,通常是一个表格的列名和数据类型。
例如,structure 可以是一个字符串,描述了列名和数据类型,如 column1 INT, column2 STRING, column3 DATE。
compression
参数可选,数据文件的压缩方式,例如 gzip, snappy, bzip2 等。

使用S3表引擎对接OBS
- 使用ClickHouse客户端连接到ClickHouse服务端,具体请参考ClickHouse客户端使用实践。
- 执行以下命令创建表。
CREATE TABLE test1_s3 ('name' String, 'age' int) ENGINE = S3(path, [ak, sk,] format, [compression])表2 参数解释 参数
说明
test1_s3
创建的表名称。
path
OBS文件路径,获取方法请参考1。
ak, sk
参数可选,具备访问OBS权限的AK/SK,获取方法请参考如何获取访问密钥AK/SK。
format
数据文件的格式。常见的格式包括 CSV, Parquet, ORC, JSON 等。
compression
参数可选,数据文件的压缩方式,例如 gzip, snappy, bzip2 等。

- 执行以下命令查询表。
select * from test1_s3;

相关文档
- 使用ClickHouse客户端连接服务端,具体请参考ClickHouse客户端使用实践。
- OBS并行文件系统的创建和使用方法,具体请参考创建并行文件系统。
- 创建ClickHouse表请参考CREATE TABLE创建表。