ClickHouse:按不同时间范围聚合数据的有效方法

ubo*_*mbi 1 group-by clickhouse

我需要在不同的时隙上聚合时间序列数据(使用平均函数),例如:

  • 今天

  • 最近 X 天

  • 上周末

  • 本星期

  • 过去 X 周

  • 这个月

  • 项目清单

    等等...

Q1:可以在GROUP BY语句中完成还是至少在单个查询中完成?

Q2:为此我需要任何物化视图吗?

表被分区Month和分片UserID

所有查询都在UserID (单个分片)内

Den*_*ane 8

使用 ROLLUP 分组

create table xrollup(metric Int64, b date, v Int64 ) engine=MergeTree partition by tuple() order by tuple();
insert into xrollup values (1,'2018-01-01', 1), (1,'2018-01-02', 1), (1,'2018-02-01', 1), (1,'2017-03-01', 1);
insert into xrollup values (2,'2018-01-01', 1), (2,'2018-02-02', 1);

SELECT metric, toYear(b) y, toYYYYMM(b) m, SUM(v) AS val
FROM   xrollup
GROUP BY metric, y, m  with ROLLUP
ORDER BY metric, y, m 

??metric??????y????????m???val??
?      0 ?    0 ?      0 ?   6 ?  overall
?      1 ?    0 ?      0 ?   4 ?  overall by metric1
?      1 ? 2017 ?      0 ?   1 ?  overall by metric1 for 2017
?      1 ? 2017 ? 201703 ?   1 ?  overall by metric1 for march 2017
?      1 ? 2018 ?      0 ?   3 ?
?      1 ? 2018 ? 201801 ?   2 ?
?      1 ? 2018 ? 201802 ?   1 ?
?      2 ?    0 ?      0 ?   2 ?
?      2 ? 2018 ?      0 ?   2 ?
?      2 ? 2018 ? 201801 ?   1 ?
?      2 ? 2018 ? 201802 ?   1 ?
????????????????????????????????
Run Code Online (Sandbox Code Playgroud)