具有唯一和非唯一数据的clickhouse中的频率直方图

h5qlskok  于 2021-07-15  发布在  ClickHouse
关注(0)|答案(2)|浏览(404)

我有一个事件表,其中包含created\u at(datetime)、userid(string)、eventid(string)列。这里userid可以是重复的,而eventid总是唯一的uuid。
我正在寻找建立两个唯一和非唯一的频率直方图。
这是基于给定的三个输入的eventid和userid
开始日期时间
结束日期时间和
间隔(1分钟,1小时,1天,7天,1个月)。
在这里,bucket将由(end\u datetime-start\u datetime)/interval决定。
输出包括开始日期时间、结束日期时间和频率。对于任何间隔,如果数据不可用,则会出现start\u datetime和end\u datetime,但频率为0。
如何为此构建通用查询?
我查看了直方图函数,但找不到任何相关文档。在尝试时,我无法理解输入和输出之间的关系。

dfuffjeb

dfuffjeb1#

count(distinct XXX) 已弃用。
更有用 uniq(XXX) 或者 uniqExact(XXX)

o0lyfsai

o0lyfsai2#

我用跟踪来工作。在这里,tostartofmonth可以更改为ch中的其他类似函数。

select toStartOfMonth(`timestamp`) interval_data , count(distinct uid) count_data 
from g94157d29.event1 
where `timestamp` >= toDateTime('2018-11-01 00:00:00') and `timestamp` <= toDateTime('2018-12-31 00:00:00') 
GROUP BY interval_data;

select toStartOfMonth(`timestamp`) interval_data , count(*) count_data
from g94157d29.event1
where `timestamp` >= toDateTime('2018-11-01 00:00:00') and `timestamp` <= toDateTime('2018-12-31 00:00:00') 
GROUP BY interval_data;

但在事件表中,toyyyymm(timestamp)是分区,toyyyyymmdd(timestamp)是排序依据,每月超过20亿条记录的性能非常低。
distinct count查询需要大于30gb的空间和30秒的时间。但没有完成。
而常规计数查询需要10-20秒才能完成。

相关问题