【发布时间】:2020-03-22 04:22:36
【问题描述】:
我需要聚合不同时间段的时间序列数据(具有平均函数),例如:
-
今天
-
过去 X 天
-
上周末
-
本周
-
过去 X 周
-
本月
-
列表项
等等……
Q1:是否可以在GROUP BY 语句中完成,或者至少在单个查询中完成?
Q2:我需要任何物化视图吗?
该表由Month分区并由UserID分片
所有查询都在UserID内(单个分片)
【问题讨论】:
标签: group-by clickhouse
我需要聚合不同时间段的时间序列数据(具有平均函数),例如:
今天
过去 X 天
上周末
本周
过去 X 周
本月
列表项
等等……
Q1:是否可以在GROUP BY 语句中完成,或者至少在单个查询中完成?
Q2:我需要任何物化视图吗?
该表由Month分区并由UserID分片
所有查询都在UserID内(单个分片)
【问题讨论】:
标签: group-by clickhouse
使用 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 │
└────────┴──────┴────────┴─────┘
【讨论】:
null 而不是零? (零值与 ROLLUP 整体零冲突)
cast(metric, 'Nullable(Int64)'), cast(toYear(b), 'Nullable(Int32)') y
-State 的 MV 呢?在这种情况下可以提供帮助吗?