最近遇到一个问题,ClickHouse中有一张表,里面有个用户(f_user)字段,每天都有统计数据,现在想取某一个的产生的新用户数据,因为用惯了MySQL,我很自然的想到同一张表做一个Join操作,然后前表的日期大于后表,where过滤条件中,后表的日期为null,这样就能取出数据,但最后发现ClickHouse并不支持这种操作,折腾了好久,最后终于搞定这个问题,这里详细描述一下过程。
在MySQL中,往往可以用类似下面的写法:
- Select a.f_date,count(a.f_user) from t_table a
- left join t_table b on a.f_date>b.f_date and a.f_user=b.f_user
- Where b.f_date is null
- Group by a.f_date
这个写法在MySQL很好用,但是在ClickHouse里面,就会报类似以下异常:
ClickHouse exception, code: 48, host: 128.0.0.1, port: 1166