Doris索引组织方式、查询与ROLLUP

Doris 的数据存储基于排序列,支持创建稀疏索引以提升查询效率。前缀索引通过排序列的前36个字节加速查询,字段顺序应与排序列一致。ROLLUP 是Base表的物化索引,用于预聚合数据,根据查询条件自动匹配合适的ROLLUP。创建不同的ROLLUP可优化不同查询场景,但过多ROLLUP会占用更多磁盘空间并影响导入速度。
摘要由CSDN通过智能技术生成

1. Doris 前缀索引

doris不支持在任意列上创建索引,而是按照指定的列对数据进行排序存储,在这种数据结构上,以排序列作为条件查询会非常的高效。

在Aggregate,Uniq,Duplicate三种数据模型中,底层的数据存储,是按照各自建表语句中,AGGREGATE KEY,UNIQ KEY,DUPLICATE KEY中指定的列进行排序存储。

doris创建的索引是稀疏索引,将一行数据按照排序列的www.qmia.cn顺序进行存储,然后取一行数据中前面不多于36个字节的数据作为索引。因此在查询时。将查询条件按照排序列进行排序,会提高查询效率。同样,创建表的时候字段顺序也应该也应该按照排序列的次序进行排序。

-- AGGREGATE KEY(siteid, city, username)  排序列的顺序与创建表的字段顺序一致
CREATE TABLE visit
(
    siteid      INT,
    city        SMALLINT,
    username    VARCHAR(32),
    pv BIGINT   SUM DEFAULT '0'
)
AGGREGATE KEY(siteid, city, username)
DISTRIBUTED BY HASH(siteid) BUCKETS 10
PROPERTIES("replication_num" = "1");

-- 查询条件和排序列的顺序一致
select * from visit where siteid = and city = and username = 

2. ROLLUP

在 Doris 中,我们将用户通过建表语句创建出来的表成为 Base 表(Base Table)。Base 表中保存着按用户建表语句指定的方式存储的基础数据。

在 Base 表之上,我们可以创建任意多个 ROLLUP 表。这些 ROLLUP 的数据是基于 Base 表产生的,并且在物理上是独立存储的。Rollup 本质上可以理解为原始表(Base Table)的一个物化索引。建立 Rollup 时可只选取 Base Table 中的部分列作为 Schema。Schema 中的字段顺序也可与 Base Table 不同。

也就是说,rollup表其实是保存了base表中的一部分字段的数据。例如

--  rollup_visit中只保存了siteid这一个维度列以及pv这个value列
alter table visit add rollup rollup_visit(siteid,pv);

这样当我们按照siteid去统计pv的聚合值的时候,可以通过查询

-- 查询的依旧是原始表
select siteid,sum(pv) from visit group by siteid;

-- 查询计划
select siteid,sum(pv) from visit group by siteid;

rollup也是有前缀索引的,sql语句按照前缀匹配对应的rollup,自动去对应的rollup中查询对应的数据。

因此,我们可以通过创建不同的rollup,来指定不同的排序列的顺序,以适应不同的查询方式。

  • ROLLUP 是附属于 Base 表的,可以看做是 Base 表的一种辅助数据结构。用户可以在 Base 表的基础上,创建或删除 ROLLUP,但是不能在查询中显式的指定查询某 ROLLUP。是否命中 ROLLUP 完全由 Doris 系统自动决定。
  • ROLLUP 的数据是独立物理存储的。因此,创建的 ROLLUP 越多,占用的磁盘空间也就越大。同时对导入速度也会有影响,但是不会降低查询效率;
  • ROLLUP 的数据更新与 Base 表示完全同步的;
  • 查询能否命中 ROLLUP 的一个必要条件(非充分条件)是,查询所涉及的所有列(包括 select list 和 where 中的查询条件列等)都存在于该 ROLLUP 的列中。否则,查询只能命中 Base 表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值