Rollup与查询
Rollup在查询中的作用:
- 索引
- 聚合数据(仅作用于聚合模型、即aggregate key)
但是为了命中Rollup需要满足一定的条件,并且可以通过执行计算中的ScanNode节点的PreAggregation的值来判断是否可以命中Rollup,以及Rollup字段判断命中的是哪一张Rollup表.
名次解释
Base:基表.
Rollup:一般指基于Base表创建的Rollup表,但在一些场景包括Base以及Rollup表.
索引
Doris会把Base/Rollup表中的前36个字节(有varchar类型的可能导致前缀索引不满36个字节,varchar会阶段前缀索引,并且最多使用varchar的20个字节)在底层底村引擎单独生成一份排序的稀疏索引数据(数据也是有排序的,用索引定位,然后在数据中做二分查找),然后在查询的时候会根据查询中的条件来匹配每个Base/Rollup的前缀索引,并选择出匹配前缀索引最长的一个Base/Rollup
聚合数据
要命中聚合物化视图需要下面一些前提:
- 查询或者自查询中涉及的所有列都存在一张独立的Rollup中;
- 如果查询或者自查询中有Join,则Join的类型需要是Inner join.
如果符合上述条件,则针对聚合模型在判断命中Rollup的时候会有两个阶段:
- 首先通过条件匹配出命中前缀索引最长的Rollup表;
- 然后比较Rollup行数,选择最小的一张Rollup.