入门clickhouse的坑

本文讲述了作者在尝试将SQLServer数据迁移到ClickHouse过程中遇到的种种问题,如安装过程、数据导入速度、查询性能对比、Zookeeper配置及时区设置等,最后解决了REPLICA_IS_ALREADY_EXIST错误并分享了keeper的使用方法。
摘要由CSDN通过智能技术生成

常规的关系数据库已经不能满足现有业务需求,于是,装了一个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.repo

sudo yum install -y clickhouse-server clickhouse-client

sudo systemctl enable clickhouse-server
sudo systemctl start clickhouse-server

sudo 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具体使用,自己慢慢摸索吧!

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值