更新时间:2026-09-10 GMT+08:00
分享

配置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

  1. 获取OBS文件路径。

    登录OBS服务管理控制台,在左侧导航栏单击“并行文件系统”,在“并行文件系统”页面单击对应的文件系统名称,在“文件”页面单击文件名称,获取前提条件上传的数据文件详细路径。
    图1 文件路径

  2. 使用ClickHouse客户端连接到ClickHouse服务端,具体请参考ClickHouse客户端使用实践
  3. 执行以下命令获取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

  1. 使用ClickHouse客户端连接到ClickHouse服务端,具体请参考ClickHouse客户端使用实践
  2. 执行以下命令创建表。

    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 等。

  3. 执行以下命令查询表。

    select * from test1_s3;

相关文档

相关文档