最近项目上遇到一部分需求,需要处理很大的数据级,领导推荐了clickHouse,目前还在一边使用一边学习,此处随记遇到的问题和解决方案,不足之处,请多指正。
一、ClickHouse的区别
之前的项目中用到的是mysql,数据量上来之后,mysql的查询就很吃力,后来数据同步到clickhouse上,clickHouse支持mysql查询,有些地方不太相同,clickhouse是列式数据库管理系统,数据始终是按列存储的,有增删查,不能修改数据,删除又分物理表和分布式表,分布式表不支持删除,需要直接去删除物理表,这点需要注意,之前我删除数据时执行alert成功,但是数据还是在的,索性直接删了表重新同步数据,好吧,个人感觉有点别扭,但毕竟是分析型数据库。
二、ClickHouse的group by问题
结合业务中,所有的查询基本都用到了group by,这ClickHouse的group by很奇怪,查询的字段包括分组的字段,必须要在group by中罗列,不然会报错,查询执行不通过,举个栗子:
这里做一个简单的查询,查询两个字段other_id,user_id,通过user_id分组,需要查询other_id,这是如果group by中如果没有other_id,则会提示报错,当时我遇到这样一个场景,就是我需要查询other_id,user_id这里两个字段,但是不想让other_id参与分组,这里首先我说一下mysql的查询方式
这里的user_id等于3的other_id实际上是有两个值2和3,那么在clickHouse中查询,需要user_id分组但是不想让other_id参与分组怎么办
clickHouse的聚合函数any(),意思是选择第一个遇到的值,这里对比一下mysql,mysql在这种情况下默认也是取第一个。
目前暂时遇到这么几个问题,后续遇到会持续更新,不足之处,请多指正,共同学习.......