clickhouse(三、查询同步远程集群)

  • 需求

在使用ck时,我们难免会遇到跨集群的数据传输,比如数据备份,不同环境同步数据等。之前试过查询出来再写入,数据量少的情况还能接受,超过10w这样效率就显得很低了,而大数据环境下10w当然是不能接受的。所以ck也提供了一种比较高效的方式,直接跨集群传输,减少了io次数,进而大幅度提升效率。

  • 方案

ck提供remote函数,允许我们去查询远程的服务。(这里要吐槽下ck的文档,目录结构的划分实在是很难找到相关函数)

remote('addresses_expr', db, table[, 'user'[, 'password']])
remote('addresses_expr', db.table[, 'user'[, 'password']])
  • 示例

文档里面没有测试用例,这里我再补充一个查询远程表行数命令:

SELECT count(*) FROM 
remote('ip:port', 'database', 'test', 'user', 'password');

其中remote()函数就可以理解为远程表名,需要注意的是port是指TCP端口,也是就默认的9000端口。那么如何传输数据了,其实就和本地表一样,只需要insert into test select ...就行了。当然select部分是可以多层嵌套加条件的,而remote函数就可以理解为一个表名使用。我们在内网用一个测试表在测试集群传输。

dc_sit_02 :) select count(*) from test_all;

SELECT count(*)
FROM test_all

┌───count()─┐
│ 180990246 │
└───────────┘

条数180990246,约等于1.8亿。

dc_sit_02 :) insert into test_all SELECT * FROM remote('ip:9000', 'default', 'test_all', 'default', '');

INSERT INTO test_all SELECT *
FROM remote('ip:9000', 'default', 'test_all', 'default', '')

Ok.

Elapsed: 137.199 sec. Processed 180.99 million rows, 16.41 GB (1.32 million rows/s., 119.59 MB/s.) 

可以看到执行了137秒,约等于2分钟,数据大小16.4G,实际速率和集群资源决定。平均132w行/s,查询并且插入,速度已经算很快了。
如果你也有数据传输需求,不防试一试这个利器。下一节 介绍一个运维重要知识点,查看clickhouse集群、表容量相关信息。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值