前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Doris rollup介绍

Doris rollup介绍

作者头像
用户1217611
发布2022-10-04 21:43:44
6330
发布2022-10-04 21:43:44
举报
文章被收录于专栏:文渊之博文渊之博文渊之博

Rollup

  •     Rollup的根本作用就是提升某些查询的查询效率,也称为物化索引。
  •     Rollup属于Base表,Base表可以增删Rollup,Rollup完全和Base表同步更新,Base表数据发生变化,Rollup也会跟随Base表变化。
  •     Rollup完全独立存储,因此要考虑存储问题。
  •     Rollup中的聚合方式也和Base表完全一致,创建Rollup时无需指定聚合方式,也不能改变原有的聚合方式。
  •     Rollup的命中条件:查询的所涉及的列必须在Rollup中,否则只能查询Base表。且Rollup会自己实现命中。

Aggregate和Unique中的Rollup:

由于Unique是Aggregate中的一种特殊的形式且底层也是使用Aggregate中的替换函数实现的,所以这里只看Aggregate模型。

建模示例:

CREATE TABLE IF NOT EXISTS testdb.testtb
(
    `id` BIGINT NOT NULL DEFAULT '0' COMMENT 'id',
    `shop` BIGINT NOT NULL DEFAULT '0' COMMENT 'shop',
    `city` BIGINT NOT NULL DEFAULT '0' COMMENT 'city',
    `bizdate` date NOT NULL  COMMENT 'bizdate',
    `gmv` DECIMAL(20,4) REPLACE NOT NULL  DEFAULT '0.0000' COMMENT 'gov产出',
    `update_time` DATETIME REPLACE NOT NULL COMMENT '更新时间',
    `create_time` DATETIME REPLACE NOT NULL COMMENT '创建时间',
    `id` BIGINT REPLACE NOT NULL DEFAULT '0' COMMENT '主键'
)
ENGINE=olap
AGGREGATE KEY(`bizdate`,`city`, `shop`)
PARTITION BY RANGE(`bizdate`)()
DISTRIBUTED BY HASH(`city`)
PROPERTIES
(
    "replication_num"="1",
    "dynamic_partition.enable" = "true",
    "dynamic_partition.time_unit" = "DAY",
    "dynamic_partition.start"="-7",
    "dynamic_partition.end"="3",
    "dynamic_partition.prefix" = "p",
    "dynamic_partition.buckets" = "8",
    "dynamic_partition.start_day_of_day" = "1"
);

命令:

    查看表结构信息 :DESC TABLE ALL;

    添加 Rollup 表(需要查看用户的总消费):

ALTER TABLE testtb ADD ROLLUP rollup_shop (shop,gmv);

    可以通过EXPLAIN来查看执行计划图

EXPLAIN SELECT  shop, sum(gmv) FROM testtb;

    查看Rollup是否创建成功:SHOW ALTER TABLE ROLLUP;

查看明细查询执行计划:explain select shop,gmv from testtb;
     
查看聚合查询执行计划:
explain select shop, sum(gmv) from testtb

Duplicate模型中的Rollup:

由于Duplicate模型中没有前缀索引,因此,只能使用Rollup进行列调整,来命中前缀索引。

前缀索引:

  • Doris和传统数据库不同,Doris这种MPP架构的数据库不支持在任意列上创建索引。
  • Doris的数据存储在SSTable这种数据结构上,该数据结构以排序列作为条件查询会非常高效。
  • 前缀索引就是在列排序的基础上,根据给定前缀列,快速查询数据的索引方式。
  • 前缀索引的设置,将一行数据的前36字节作为当前行的前缀索引,在遇到VARCHAR数据类型会前缀索引会直接截断。
  1.     比如一张表中的字段和数据类型是:uid BIGINT , age INT , name VARCHAR(50)
  2.     那么这张表的前缀索引就是:uid (8 byte) + age (4 byte)  + name (20 byte)
  3.     比如这张表的字段和数据类型顺序是:name VARCHAR(50) ,uid BIGINT , age INT
  4.     那么这张表的前缀索引是:name(20byte) 会从一开始就截断

在查询时使用前缀索引的前缀进行查询会极大的提高查询效率

通过Rollup实现前缀索引的列排序:

可以通过在Base表上添加Rollup的方式重新调整列的排序,来达到调整前缀索引的目的。

而且在查询时还会优先匹配Rollup,因为前缀索引匹配度高

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-09-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Rollup
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档