ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

入门clickhouse的坑

2026/8/5 17:59:56 拓冰建站 浏览量
入门clickhouse的坑

常规的关系数据库已经不能满足现有业务需求,于是,装了一个ck玩玩,结果,妥妥的跳坑!

安装,首页就是一行语句,curl就可以安装了,确实很简单。

写了一个小工具,把整个sqlserver数据导入到ck,速度还不错,每秒2w+,然后做了几个报表的查询脚本,sqlserver 291s,ck不到1s,这个差异吓我一跳,快得有点过分!

好吧,往里搬运更多的查询功能,打算整个读写分离,结果,导入数据时候默认使用MargeTree,在实际中,需要用Order By的时候,非常非常非常慢!看了很多文章,说是要用ReplicatedReplacingMergeTree,于是快速写了一个create table脚本,直接报zookeeper连接错误。

好吧,下载了一个zookeeper,安装上了,也在/etc/clickhouse-server/config.xml中配置了zookeeper的连接,结果,还是不行!很气人的好不好。

在官网找了一堆文档,从头看起,里边有install的说明

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://packages.clickhouse.com/rpm/clickhouse.reposudo yum install -y clickhouse-server clickhouse-clientsudo systemctl enable clickhouse-server
sudo systemctl start clickhouse-serversudo systemctl enable clickhouse-keeper
sudo systemctl start clickhouse-keeper

这样就好了!

我记住了,把原来的先停掉,然后再安装。安装yum install clickhouse-server的时候,会自动把keeper安装好,安装好后,不要着急启动服务,先配置好ck的config.xml,包括访问地址

    <zookeeper>
        <node>
            <host>127.0.0.1</host>
            <port>9181</port>
        </node>
    </zookeeper>

<listen_host>0.0.0.0</listen_host>

<timezone>Asia/Shanghai</timezone>

这三个地方重点改一下

然后就启动两个服务吧。一切成功!

值得高兴的是,之前导入的数据,全部还在。太好了,省了不少时间。

既然入坑了,就继续踩坑,头破血流也在所不惜!

另外一个巨坑,flink-cdc还想没有现成的sqlserver-clickhouse,有没有帮忙弄弄的,谢谢大侠们

注意时区的设置,这个很重要,clickhouse写入日期时间数据,默认是按utc写入的,也就是说

insert into table (dt) values('2023-01-01 20:00:00')

查询出来

select dt from table

结果出来是

2023-01-01 12:00:00

把查询改为

SELECT itoTimezone(dt,timezone()) dt from table

这样出来的结果就是正确的+8数据,当然也可以不管这么多,直接+8

select  date_add(hour,8, dt) from table

看起来是对的,到程序里边怎么样,还不知道,估计直接查dt就可以了,类似json一样。

遇到一个问题,删除表后,竟然无法再创建,提示

REPLICA_IS_ALREADY_EXIST

事情是这样的,创建表,使用了order by (datetimefield,field2),后续要对datetimefield这个字段更新,竟然提示不能修改,没办法,想去掉这个字段,看文档,是没有办法的。只能重建表,反正都是测试用的数据,无所谓了。

创建表的配置是:

ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/dbname/tablename',

'dbname.tablename',

datetimefield,field2) PRIMARY KEY (`id`)

ORDER BY (`id`)

drop table 后,再用相同的配置,只是减少了一个datetimefield字段,就报上述错误。

网上找了很多,都没有说清楚解决办法,这里补充一下,前提是使用clickhouse-keeper,在Linux输入以下命令,进入到keeper的命令模式

clickhouse keeper-client

默认安装都没有密码,且这个服务只能127.0.0.1访问的

然后就像linux一样操作即可

ls列出所有的目录

然后找到删除表的那个目录

cd clickhouse

cd tables

cd dbname

rmr tablename

exit

好了,这样就把原来的节点删除掉了,再去创建表,没有再报错了。

至于keeper具体使用,自己慢慢摸索吧!