- 我先说下我用clickhouse的一些业务背景
我是做BI得,clickhouse的一些特性非常符合我们的业务场景
用clickhouse的第一个项目是对一些离线数据的BI展示
主要分为几点
- 每天配置定时将clickhouse的表数据清空,并灌入新的业务数据
- 对clickhouse的数据进行实时的查询
- 说下我得clickhouse部署情况
四台机器:两台做得分布式查询,另外两台做得复制表
- jdbc在clickhouse集群中的使用
clickhouse在复制表中几乎所有得ddl命令都不支持复制,除alter之外
也就是说create drop等命令都必须在所有机器上都执行
为了方便说明 我把上述四台机器编号为 1_1, 1_2 ,2_1,2_2 其中1_1和2_1为查询节点,1_2和2_2为1_1和2_1得复制节点
- 创建本地表 得在四台机器上都执行
statement.execute("create table IF NOT EXISTS " + tableName
+ “(date Date,a String,b String) ENGINE = ReplicatedMergeTree(’/clickhouse_perftest/tables/{shard}/”
+ tableName + “’, ‘{replica}’,date, (a,b), 8192)”);
- 创建分布式表 在查询节点(1_1和2_1)执行
statement.execute("CREATE TABLE IF NOT EXISTS " + tableName
+ “_all AS test ENGINE = Distributed(bip_ck_cluster, configReport,” + tableName
+ “,rand())”);
- 插入数据
可以选择插入分布式表(1_1或2_1)
insert into " + tableName + "_all values(?,?,?)
会造成本地表数据不均衡
也可以轮询插入查询节点得本地表(1_1和2_1)
nsert into " + tableName + "values(?,?,?)
数据均衡
- 删除数据
在本地表中执行(1_1和2_1)
statement.execute("ALTER table " + tableName + " DROP PARTITION ‘201801’ ");
注:只允许按月删除,分布式表不能执行删除,
还有就是通过jdbc删除必须有default用户而且密码必须为空才能成功,如果有人解决这个问题,可以告诉我
- 删除表
得在四台机器上都执行
- 感谢
特别感谢JackpGao,是看到他的演讲才知道这么好的产品,看他的博客和在他得帮助下,才搭建起的集群
回到顶部