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 <集群名>,创建之后会打印受影响的所有主机信息
clickhouse 在集群上增删改查_第1张图片
在另一台服务器上使用 SHOW DATABASES 查看当前数据库,可以发现数据库已经同步过来了
clickhouse 在集群上增删改查_第2张图片
使用 SHOW CREATE DATABASE <数据库名> 可以看到建库语句 (但这里不是实际的建库语句)

clickhouse 在集群上增删改查_第3张图片

建表

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 语句需要申明集群,后续插入、查询等语句均不需要
clickhouse 在集群上增删改查_第4张图片

在另一台服务器上查,可以发现数据表已经同步过来了

# 指明数据库
USE <待查询的数据库>
# 显示该数据库下的所有表
SHOW TABLES

clickhouse 在集群上增删改查_第5张图片

插入数据

插入数据 INSERT INTO test.test_1s1r (1, 'bob', now())。可以发现:执行命令的那台服务器,数据已经被插入了,而另一台服务器,则查不到数据
clickhouse 在集群上增删改查_第6张图片
这时候,在未同步的服务器上查询clickhouse的错误日志

  1. 可以使用 tail 命令查看错误日志的倒数100行
    tail -n 100 /var/log/clickhouse-server/clickhouse-server.err.log
  2. 使用 vim 命令编辑错误日志,并使用 / 查询错误
    vim /var/log/clickhouse-server/clickhouse-server.err.log

clickhouse 在集群上增删改查_第7张图片
错误日志显示:域名无法解析。

注意,之前在配置 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映射被修复后,就立即自动同步了。
clickhouse 在集群上增删改查_第8张图片
现在再次插入数据试试 INSERT INTO test.test_1s1r VALUES (2, 'tina', now())。可以看到插入的回显跟单机一样,但在另一个副本上立马就能查询的到了
clickhouse 在集群上增删改查_第9张图片

修改数据

修改数据的时候要注意一下,“排序键” 和 “分区键” 不能被修改,会报错。

修改成功会打印 ok,但是明明影响了一行,这里却提示 0 行被设置

修改语句:ALTER TABLE test_1s1r UPDATE name = 'unknown' WHERE name = 'bob'
clickhouse 在集群上增删改查_第10张图片

clickhouse 在集群上增删改查_第11张图片

添加字段

#打印建表语句
SHOW CREATE TABLE <数据库名>.<表名>
#修改表结构,新增一列字段
ALTER TABLE <数据库名>.<表名> ADD/MODIFY/DELETE COLUMN <字段名> COMMENT <注释内容>
#重新打印建表语句
SHOW CREATE TABLE <数据库名>.<表名>

clickhouse 在集群上增删改查_第12张图片

删除行

ALTER TABLE <数据库名>.<表名> DELETE WHERE <筛选条件>
clickhouse 在集群上增删改查_第13张图片

删除表

注意,删除表和创建表一样,必须使用集群的方法。不然,只会删除本机的表,而副本中的表依然存在,这样会造成数据分裂
clickhouse 在集群上增删改查_第14张图片
正确的做法是 DROP TABLE <数据库名>.<表名> ON CLUSTER <集群名>

这里由于刚刚使用错误的语句,把本机的表删除了,因此这里会报错。与此同时,集群上的其他主机的相应表也被删除了
在这里插入图片描述
也可以使用 DROP TABLE IF EXISTS <数据库名>.<表名> ON CLUSTER <集群名> 跳过不存在的表
clickhouse 在集群上增删改查_第15张图片

你可能感兴趣的