本文介绍如何通过云数据库ClickHouse查询阿里云对象存储OSS(Object Storage Service)数据以及如何写入数据至OSS。
前提条件
注意事项
- 云数据库ClickHouse的云原生版集群不支持访问OSS数据。
- 云数据库ClickHouse支持访问多种格式的OSS文件,除不支持Protobuf和CapnProto外,其他均支持,具体请参见ClickHouse支持的文件格式。
- 请确认OSS存储空间(Bucket)与您的云数据库ClickHouse集群在同一地域,并使用阿里云VPC网络访问OSS。
- 通过云数据库ClickHouse写入数据至OSS,会覆盖原来的OSS文件数据。
步骤一:登录数据库
- 登录云数据库ClickHouse控制台。
- 在集群列表页面,选择默认实例列表,单击目标集群ID。
- 在集群信息页面,单击右上方导航栏的登录数据库。
- 在登录实例页面,输入数据库账号和密码,单击登录。
步骤二:创建OSS外表
步骤三:写入数据至OSS
insert into oss_test_tbl values(11, 'tick', 25, 'shanghai', 'http://example.com');
步骤四:查询数据
云数据库ClickHouse提供了表引擎和表函数两种方法查询OSS数据。
- 通过表引擎查询OSS数据。
查询OSS外表的数据:
select * from oss_test_tbl;
返回结果:┌─id─┬─user_name─┬──age──┬───city─────┬─────access_url────────┐ │ 11 │ tick │ 25 │ shanghai │ http://example.com │ └────┴───────────┴───────┴────────────┴───────────────────────┘
- 通过表函数查询OSS数据。
- 21.8及以下版本的查询语法:
SELECT * FROM oss('<oss-endpoint>', '<access-key-id>', '<access-key-secret>', '<oss-file-path>', '<file-format-name>', '<col_name> <col_type>(,...)');
- 22.8版本的查询语法:
SELECT * FROM oss('https://<bucketName>.<oss-endpoint>/<file-name>','<access-key-id>', '<access-key-secret>', '<file-format-name>', '<col_name> <col_type>(,...)');
参数的详细信息,请参见参数说明。
示例语句:- 21.8及以下版本的查询语句:
SELECT * FROM oss('oss-cn-shanghai-internal.aliyuncs.com', 'LTAI5tDVcUKu2CbcBwhr****', 'WAcroHBcL7IVOK8FIHzNJy91Lc****', 'oss://testBucketName/test.csv', 'CSV', 'id UInt8, user_name String, age UInt16, city String, access_url String');
- 22.8版本的查询语句:
SELECT * FROM oss('http://testBucketName.oss-cn-shanghai-internal.aliyuncs.com/test.csv', 'LTAI5tDVcUKu2CbcBwhr****', 'WAcroHBcL7IVOK8FIHzNJy91Lc****', 'CSV', 'id UInt8, user_name String, age UInt16, city String, access_url String')
返回结果:┌─id─┬─user_name─┬──age──┬───city─────┬─────access_url────────┐ │ 11 │ tick │ 25 │ shanghai │ http://example.com │ └────┴───────────┴───────┴────────────┴───────────────────────┘
- 21.8及以下版本的查询语法: