ClickHouse使用阿里云服务相关

本文详细介绍了阿里云ClickHouse的架构、节点类型、分布式表的创建、修改以及操作规则,包括数据插入、查询和删除更新的注意事项。

概念

1.阿里云架构
在这里插入图片描述
2.节点
节点是逻辑概念,其架构也说明了集群默认包含1个或多个节点,或者说是分片(shard)
节点下包含一个或者多个服务器,具体包含几个,与购买的配置有关。

例如:单副本版:指的是节点中只有一个服务器,每个节点只有1个副本,该副本服务不可用时,会导致整个集群不可用,需要等待此副本完全恢复服务状态,集群才能继续提供稳定服务。
双副本版:每个节点包含两个副本,某个副本服务不可用的时候,同一分片的另一个副本还可以继续服务。
集群下包含节点(分片),节点下包含1个或者多个副本,或者说包含一个或多个服务器。

3.多分片多副本:需要购买双副本版,选择多个节点
4. 单分片多副本:需要购买双副本版,选择一个节点
5. 多分片1副本:需要购买单副本版,选择多个节点

相关问题查看阿里云文档

https://help.aliyun.com/document_detail/162815.html?spm=a2c4g.167447.0.0.bc531a2eSXY4yo

ClickHouse相关

Clickhouse分布式表应用修改点

分布式表创建
需要先建本地表

CREATE TABLE city_local on cluster default_cluster
(
  `id` Int64,
  `city_code` Int32,
  `city_name` String,
  `total_cnt` Int64,
  `event_time` DateTime
)
Engine=ReplicatedMergeTree('/clickhouse/tables/{shard}/app/city_local', '{replica}')
PARTITION BY toYYYYMMDD(event_time)
ORDER BY id;

创建分布式表

CREATE TABLE city_all on cluster default_cluster
AS app.city_local
ENGINE = Distributed(default_cluster, app, city_local, rand());

rand()分片键可以用采用区分度较高的列的哈希值, 如sipHash64(id).
intHash64(toInt64(city_name))

表的操作
清空分布式表的数据,不会清空数据,只能通过清空本地表的方式来清空分布式表的数据

truncate table t_table_local on cluster default_cluster;

不会生效
truncate table t_table_distribute on cluster default_cluster;

drop分布式表
drop table t_table_distribure on cluster default_cluster;

修改本地表表名
修改本地表表名会更改本地系统的文件名称,但是不会更改zookeeper的路径名称,这块需要注意下。
新增分布式表的时候,只会在本地建一个空的目录,但是在zookeeper上面不会新增目录
所以可以通过rename本地表成本地表名加上local,然后建分布式表的时候直接用原先的本地表名就可以了。
SQL

RENAME TABLE test_name_local TO test_name_new on cluster default_cluster 
修改表字段
修改本地表字段字段,分布式表会跟着改变吗?分布式表字段不会跟着改变,还需要修改分布式表的字段才可以

alter table t_table_local on cluster default_cluster drop column column_code
修改分布式表字段,本地表会跟着改变吗?修改分布式表的字段,本地表也不会跟着改变,还需要修改本地表的字段

alter table t_table_distribute on cluster default_cluster drop column category_code

插入操作
插入分布式表数据会自动同步到不同的分片中

insert into city_all (id, city_code, city_name, total_cnt, event_time) 
values (1, 4000, 'guangzhou', 420000, '2022-02-21 00:00:00');

也可以通过插入不同的机器的分片来插入数据,但是需要知道不同分片的地址是啥。
insert into city_local (id, city_code, city_name, total_cnt, event_time) 
values (1, 4000, 'guangzhou', 420000, '2022-02-21 00:00:00');

删除和更新
分布式表是不支持删除和更新的,如果需要删除更新数据,是通过删除和更新本地表来进行操作的。
删除数据
ALTER TABLE app.city_local ON CLUSTER default_cluster DELETE WHERE id in (1,2);
删除分区
ALTER TABLE app.city_local ON CLUSTER default_cluster drop partition(20220222);
更新数据
ALTER TABLE app.city_local ON CLUSTER default_cluster 
update city_name ='beijing' where event_time >'2022-02-21 00:00:00';

查询操作
查询操作需要注意子查询和join操作就好,需要多加个global字段
SQLselect id,city_code from city_all where repo = 100
and id global in (select id from city_all where repo = 100)


select a.id from app.city_all a  global inner join app.city_all b on a.id = b.id 

改造点

删除或者更新数据的地方
如果是本地表只需要加on cluster default_cluster,如果是一个分片的集群也可以不加
如果是分布式表因为分布式表不支持删除,只能删除本地表所以需要在表的后缀加上  _local  并加上on cluster default_cluster
TableClusterUtil.getLocal(租户) 加表的后缀,只在更新表或者删除表的时候在表的后缀上调用这个方法。

查询的地方注意子查询和join查询 
如果是本地表不加global,分布式表注意joinin前加上global可以使用

插入的地方不需要改变
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值