Doris--基础--5.1--Rollup

Doris–基础–5.1–Rollup


1、介绍

  1. ROLLUP 在多维分析中是"上卷"的意思,即将数据按某种指定的粒度进行进一步聚合。
  2. Rollup 可以理解为 Table 的一个物化索引结构。
    1. 物化是指:其数据在物理上独立存储,
    2. 索引是指:Rollup可以调整列顺序以增加前缀索引的命中率,也可以减少key列以增加数据的聚合度。

1.1、概念

  1. 在Doris中,我们将用户通过建表语句创建出来的表成为 Base表(Base Table),Base表中 保存着按用户建表语句指定的方式存储的基础数据。
  2. 在Base表 之上,我们可以创建任意多个 ROLLUP表。这些 ROLLUP 的数据是基于 Base 表产生的,并且在物理上是独立存储的。

1.2、作用

  1. 在于在 Base 表的基础上,获得更粗粒度的聚合数据。
    1. 在聚合表的基础上,按照其他维度再进一步聚合,提升查询效率。
  2. Doris索引是固定的前缀索引,用rollup改变索引顺序
  3. 提高某些查询的查询效率(无论是通过聚合来减少数据量,还是修改列顺序以匹配前缀索引)。

1.3、触发ROLLUP

  1. ROLLUP 创建完成之后的触发是程序自动的,不需要任何其他指定或者配置。
  2. 查询能否命中 ROLLUP 的一个必要条件(非充分条件)是,查询所涉及的所有列(包括 select list 和 where 中的查询条件列等)都存在于该 ROLLUP 的列中。否则,查询只能命中 Base 表。

1.4、注意

  1. ROLLUP 的数据更新与 Base 表示完全同步的。用户无需关心这个问题。
  2. ROLLUP 中列的聚合方式,与 Base 表完全相同。
  3. 在创建 ROLLUP 无需指定,也不能修改。
  4. Schema 中的字段顺序 可与 Base Table 不同。

2、测试数据

CREATE TABLE IF NOT EXISTS test_db.site_visit
(
    `user_id` LARGEINT NOT NULL COMMENT "用户id",
    `date` DATE NOT NULL COMMENT "数据灌入日期时间",
    `city` VARCHAR(20) COMMENT "用户所在城市",
    `age` SMALLINT COMMENT "用户年龄",
    `sex` TINYINT COMMENT "用户性别",
    `last_visit_date` DATETIME REPLACE DEFAULT "1970-01-01 00:00:00" COMMENT "用户最后一次访问时间",
    `cost` BIGINT SUM DEFAULT "0" COMMENT "用户总消费",
    `max_dwell_time` INT MAX DEFAULT "0" COMMENT "用户最大停留时间",
    `min_dwell_time` INT MIN DEFAULT "99999" COMMENT "用户最小停留时间"
)
AGGREGATE KEY(`user_id`, `date`, `city`, `age`, `sex`)
DISTRIBUTED BY HASH(`user_id`) BUCKETS 10;





insert into test_db.site_visit values(10000,'2017-10-01','北京',20,0,'2017-10-01 06:00:00',20,10,10);
insert into test_db.site_visit values(10001,'2017-10-01','北京',30,1,'2017-10-01 17:05:45',2,22,22); 
insert into test_db.site_visit values(10002,'2017-10-02','上海',20,1,'2017-10-02 12:59:12',200,5,5); 
insert into test_db.site_visit values(10003,'2017-10-02','广州',32,0,'2017-10-02 11:20:00',30,11,11); 
insert into test_db.site_visit values(10004,'2017-10-01','深圳',35,0,'2017-10-01 10:00:15',100,3,3); 

3、举例

3.1、场景

比如需要查看某个城市的user_id数,那么可以建立一个只有user_id和city的rollup

3.2、创建rollup

alter table site_visit add rollup rollup_city_userid(city,user_id);

3.3、通过命令查看完成状态

SHOW ALTER TABLE ROLLUP;

在这里插入图片描述

3.4、查看完成情况

DESC site_visit ALL;

在这里插入图片描述

3.5、可以使用以下命令取消当前正在执行的作业(只有未完成状态的才能取消)

CANCEL ALTER TABLE ROLLUP FROM site_visit;

SHOW ALTER TABLE ROLLUP;

3.6、查询(执行的时候,BE就挂了)

Rollup 建立之后,查询不需要指定 Rollup 进行查询。还是指定原有表进行查询即可。程序会自动判断是否应该使用 Rollup。是否命中 Rollup可以通过 EXPLAIN your_sql; 命令进行查看。

3.6.1、查询数据

select select date from site_visit where city='北京';

3.6.2、查看执行计划是否命中Rollup

explain select date from site_visit where city='北京';
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值