clickhouse 在集群上增删改查
Posted 福州-司马懿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了clickhouse 在集群上增删改查相关的知识,希望对你有一定的参考价值。
测试环境说明
这里测试的是 “1分片1副本” 集群环境,2台服务器( PC1 192.168.100.101
& PC2 192.168.100.102
)。集群名字之前在 metrika.xml 里配置的是 ch_1s_1r
查看集群
在任意一台机上,使用 /usr/bin/clickhouse-client --host localhost --port 9000
连接本地服务器
使用 SELECT * FROM system.clusters
打印集群列表
建库
create database <数据库名> on cluster <集群名>
,创建之后会打印受影响的所有主机信息
在另一台服务器上使用 SHOW DATABASES
查看当前数据库,可以发现数据库已经同步过来了
使用 SHOW CREATE DATABASE <数据库名>
可以看到建库语句 (但这里不是实际的建库语句)
建表
CREATE TABLE test.test_1s1r ON CLUSTER ch_1s_1r(id UInt8, name String, date DateTime) ENGINE = ReplicatedMergeTree('/clickhouse/layer/tables/shard/test_1s1r', 'replica') PARTITION BY toYYYYMM(date) ORDER BY id
建表后,同样会打印出所有受影响主机信息
注意:只有 DDL 语句需要申明集群,后续插入、查询等语句均不需要
在另一台服务器上查,可以发现数据表已经同步过来了
# 指明数据库
USE <待查询的数据库>
# 显示该数据库下的所有表
SHOW TABLES
插入数据
插入数据 INSERT INTO test.test_1s1r (1, 'bob', now())
。可以发现:执行命令的那台服务器,数据已经被插入了,而另一台服务器,则查不到数据
这时候,在未同步的服务器上查询clickhouse的错误日志
- 可以使用
tail
命令查看错误日志的倒数100行
tail -n 100 /var/log/clickhouse-server/clickhouse-server.err.log
- 使用
vim
命令编辑错误日志,并使用/
查询错误
vim /var/log/clickhouse-server/clickhouse-server.err.log
错误日志显示:域名无法解析。
注意,之前在配置 metrika.xml 时,我用的都是IP地址,从没用过域名。但是 clickhouse 还是会自动使用域名进行通信。因此必须修改 /etc/hosts
文件,为每台机配置 “域名到IP” 的映射关系。vim /etc/hosts
添加如下内容
192.168.100.101 PC1
192.168.100.102 PC2
192.168.100.103 PC3
修改好后,无需任何操作,映射立即生效
重新使用 /usr/bin/clickhouse-client --host localhost --port 9000
连接本地服务器,使用查询命令 SELECT * FROM <之前创建的表>
,可以发现,之前未同步的数据,在域名IP映射被修复后,就立即自动同步了。
现在再次插入数据试试 INSERT INTO test.test_1s1r VALUES (2, 'tina', now())
。可以看到插入的回显跟单机一样,但在另一个副本上立马就能查询的到了
修改数据
修改数据的时候要注意一下,“排序键” 和 “分区键” 不能被修改,会报错。
修改成功会打印 ok,但是明明影响了一行,这里却提示 0 行被设置
修改语句:ALTER TABLE test_1s1r UPDATE name = 'unknown' WHERE name = 'bob'
添加字段
#打印建表语句
SHOW CREATE TABLE <数据库名>.<表名>
#修改表结构,新增一列字段
ALTER TABLE <数据库名>.<表名> ADD/MODIFY/DELETE COLUMN <字段名> COMMENT <注释内容>
#重新打印建表语句
SHOW CREATE TABLE <数据库名>.<表名>
删除行
ALTER TABLE <数据库名>.<表名> DELETE WHERE <筛选条件>
删除表
注意,删除表和创建表一样,必须使用集群的方法。不然,只会删除本机的表,而副本中的表依然存在,这样会造成数据分裂
正确的做法是 DROP TABLE <数据库名>.<表名> ON CLUSTER <集群名>
这里由于刚刚使用错误的语句,把本机的表删除了,因此这里会报错。与此同时,集群上的其他主机的相应表也被删除了
也可以使用 DROP TABLE IF EXISTS <数据库名>.<表名> ON CLUSTER <集群名>
跳过不存在的表
以上是关于clickhouse 在集群上增删改查的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot + Mybatis-puls + ClickHouse增删改查入门教程
Spring Boot + Mybatis Plus + ClickHouse 轻松实现增删改查,看了必懂。。
Spring Boot + Mybatis Plus + ClickHouse 轻松实现增删改查,看了必懂。。