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的错误日志

  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


错误日志显示:域名无法解析。

注意,之前在配置 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 在集群上增删改查的主要内容,如果未能解决你的问题,请参考以下文章

beego 初体验 - orm - 增删改查

SpringBoot + Mybatis-puls + ClickHouse增删改查入门教程

Spring Boot + Mybatis Plus + ClickHouse 轻松实现增删改查,看了必懂。。

Spring Boot + Mybatis Plus + ClickHouse 轻松实现增删改查,看了必懂。。

系统运维系列 之Clickhouse数据库学习集锦(增删改查操作)

系统运维系列 之Clickhouse数据库学习集锦(增删改查操作)