参考文档
https://clickhouse.tech/docs/en/sql-reference/table-functions/s3/
https://clickhouse.tech/docs/en/engines/table-engines/integrations/s3/
https://aws.amazon.com/cn/blogs/china/explore-three-ways-to-combine-clickhouse-and-amazon-s3/
前言
clickhouse与s3之间的关系,主要有三种,s3函数,s3表,disks3存储策略,应用场景很多,比如数据备份,数据导出,数据冷热分层,存算分离等,非常值得学习和使用。
准备
需要修改config.xml配置
1,判断证书文件是否存在 file /etc/pki/tls/certs/ca-bundle.crt
2,添加 <caConfig>/etc/pki/tls/certs/ca-bundle.crt</caConfig>配置。
S3函数
write
INSERT INTO FUNCTION s3('endpoint/cdnlog-s3-test1.csv.gz','AK','SK', 'CSV', 'name String, value UInt32', 'gzip') VALUES ('cdnlog-data1', 1), ('cdnlog-data2', 2)
注意FUNCTION关键字,否则会写失败
通过s3查看工具,可以看到csv文件成功写入了s3
需要注意的是,如果多次写同一个文件名,文件信息会被覆盖。
read
select * from s3('endpoint/cdnlog-ckbak-test/cdnlog-s3-test1.csv.gz','AK','SK', 'CSV', 'name String, value UInt32', 'gzip')
S3表引擎
--创建表
CREATE TABLE default.s3_test_t_demo
(
`dt` Date,
`id` Int64,
`data` String
)
ENGINE = S3('endpoint/cdnlog-ckbak-test/cdnlog-demo1.csv', 'AK', 'SK', 'CSV')
write
--写多条数据
INSERT INTO s3_test_t_demo VALUES (NOW(),1,'CDNLOG_1'),(NOW(),2,'CDNLOG_2'),(NOW(),3,'CDNLOG_3'),(NOW(),4,'CDNLOG_4'),(NOW(),5,'CDNLOG_5'),(NOW(),6,'CDNLOG_6')
通过s3查看工具,可以看到csv文件成功写入了s3。
需要注意的是,多次写入,信息会被覆盖。
read
select * from s3_test_t_demo
可以看到
DiskS3
disks3主要用户存储策略,一般使用在数据存储分层,冷热数据分离等场景。
配置修改
在配置文件cdnlog_storage.xml中 添加如下配置
重启服务
sudo systemctl restart clickhouse-server
1,新建表&写入数据
--表
CREATE TABLE cdnlog_disks3_demo1 ( dt Date, id Int64, data String ) ENGINE=MergeTree() PARTITION BY dt ORDER BY (dt, id) SETTINGS storage_policy='cdnlog_s3_policy'
--insert
INSERT INTO cdnlog_disks3_demo1 VALUES (NOW(),1,'WHG1'),(NOW(),2,'WHG2'),(NOW(),3,'WHG3'),(NOW(),4,'WHG4'),(NOW(),5,'WHG5'),(NOW(),6,'WHG6')
2,查看结果
数据写入成功后,可以发现和本地存储使用上无多大的影响,但是读写速度会慢很多。
总结
S3 大大提高了clickhouse存储能力,但是需要注意的是会减少数据的加载和写入速度。社区也思考使用S3做存算分离的功能。clickhouse的s3功能未来肯定会越来越完善。