Clickhouse中的频率直方图,包含唯一和非唯一数据

时间:2019-05-17 13:12:57

标签: clickhouse

我有一个带有created_at(DateTime),userid(String),eventid(String)列的事件表。这里的userid可以重复,而eventid始终是唯一的uuid。

我希望构建唯一和非唯一的频率直方图。

在给定的三个输入的基础上,这同时适用于eventid和userid

  1. 开始日期时间
  2. 结束日期时间和
  3. 间隔(1分钟,1小时,1天,7天,1个月)。

在这里,存储桶将由(end_datetime-start_datetime)/ interval决定。

输出以开始日期时间,结束日期时间和频率显示。 在任何时间间隔内,如果没有可用数据,则出现start_datetime和end_datetime,但频率为0。

如何为此建立通用查询?

我查看了直方图函数,但找不到任何相关文档。尝试时,我无法理解输入和输出之间的关系。

2 个答案:

答案 0 :(得分:0)

我使用以下方法使它起作用。在这里,可以将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;

但是在事件表中,每月超过20亿条记录的性能非常低,其中toYYYYMM(时间戳)是分区的,toYYYYMMDD(时间戳)是排序的。

非重复计数查询需要> 30GB的空间和30秒的时间。尚未完成。

一般计数查询需要10到20秒才能完成。

答案 1 :(得分:0)

count(distinct XXX)已过时。

更有用的uniq(XXX)uniqExact(XXX)