ROLLUP 在多维分析中是“上卷”的意思,即将数据按某种指定的粒度进行进一步聚合。
在 Doris 中,我们将用户通过建表语句创建出来的表称为 Base 表(Base Table)。Base 表中保存着按用户建表语句指定的方式存储的基础数据。
在 Base 表之上,我们可以创建任意多个 ROLLUP 表。这些 ROLLUP 的数据是基于 Base 表产生的,并且在物理上是独立存储的。
ROLLUP 表的基本作用,在于在 Base 表的基础上,获得更粗粒度的聚合数据。
Aggregate 和 Uniq 模型中的 ROLLUP
以 Doris 数据模型-Aggregate 模型中创建的 example_site_visit2 表为例。
(1)查看表的结构信息
desc example_site_visit2 all;
(2)比如需要查看某个用户的总消费,那么可以建立一个只有 user_id 和 cost 的 rollup
alter table example_site_visit2 add rollup rollup_cost_userid(user_id,cost);
(3)查看表的结构信息
desc example_site_visit2 all;
(4)然后可以通过 explain 查看执行计划,是否使用到了 rollup
explain SELECT user_id, sum(cost) FROM example_site_visit2 GROUP BY user_id;
Doris 会自动命中这个 ROLLUP 表,从而只需扫描极少的数据量,即可完成这次聚合查询。
(5)通过命令查看完成状态
SHOW ALTER TABLE ROLLUP;
获得不同城市,不同年龄段用户的总消费、最长和最短页面驻留时间
(1)创建 ROLLUP
alter table example_site_visit2 add rollup rollup_city_age_cost_maxd_mind(city,age,cost,max_dwell_time,min_dwell_time);
(2)查看 rollup 使用
explain SELECT city, age, sum(cost), max(max_dwell_time), min(min_dwell_time) FROM example_site_visit2 GROUP BY city, age;
explain SELECT city, sum(cost), max(max_dwell_time), min(min_dwell_time) FROM example_site_visit2 GROUP BY city;
explain SELECT city, age, sum(cost), min(min_dwell_time) FROM example_site_visit2 GROUP BY city, age;
(3)通过命令查看完成状态
SHOW ALTER TABLE ROLLUP;