00:00
接下来我们了解一个比较关键的特性,叫roll up上卷,这个其实在多元分析里面很常见,叫上卷,它是我们将按照某种力度进一步的聚合。简单来讲是一般是一个更粗力度的聚合。啊。那我们了解一下基本概念,我们正常创建的表,我们称为基表,贝斯表啊,基表。鸡啊。那在基础之上,我们可以对它创建多个roll up表。对吧,以它为基础可以创建多个roll up表,那这些数据,呃,他们的数据在物理上是独立存储的,也就是说基表还有揉二表,它们之间数据是啊隔离的啊,不会互相影响啊,不是不会互相影响,就是啊是独立存储,那多个柔R表之间也是独立的。
01:01
那我们再来聊聊这个上卷的作用。啊,在聚合角度来讲,你就关键词就是这个。获得更粗力度的聚合数据。我举个例子啊,呃。就比如说咱们还是有这么一张表啊,啊这么一张表,呃,那比如说我指定了一个aggregate key是是ID啊,Name啊这三个啊,还有class吧啊那比如说我分数啊,没有没没有实际意义啊啊扣比如说分数我指定为some类型。啊上聚合类型,好,这基于这个场景,那么大家想想我这么用的话,其实我是不是相当于啊,什么group ID那啊学科class啊,然后呢,然后再求了一个some什么呢?Co,如果我们把这个聚合模型转换成我们,呃,正常好理解的circle是不是相当于这种情况,那么大家可以看到这个时候我们的维度是不是基于这四个T列就是我们的维度啊。
02:22
那上卷是什么意思呢?来,我们再理解一下上卷。No up,什么叫获取更粗力度的聚合结果?什么叫更粗力度?我们现在力度是不是细到四个维度啊?那上卷的意思就是说,哎,我基于此,接下来我做了一个聚合,就是只根据。就去掉最后一个,只根据这三列做了一个上,这是是不是力度更粗了,因为你不按看最后一个维度字段去做分组了,对吧,除了这个之外,他还会获取一个什么ID跟内这个更粗力度的一个。
03:13
一个一个一个聚合上,再最后再获取一个,只有ID这一列的。维度的一个上值,甚至最后呢,就是不做group by直接上那也不行,对吧?啊按空维度就总的嘛,这个就是所谓的上元,说白了就是你原先这个T字段就挨个减少,挨个减少,挨个减少挨个减少,每一个组合我都给你求出一个聚合值,这个就是上圈。这个在我们实际应用中也很多,比如说你统计的是什么,哎,公司啊,然后呢部门。呃。然后性别啊,然后比如说工资啊,有这么几个字段,你按照的是什么?先按照每个公司每个部门,每种性别的工资,对吧?求了一个工资,你是总和也好,平均值也好,这个是不是很常见,就是说假设有这么个需求,那你同时是不是也知道我不按性别,我只按公司和部门来统计一下平均薪资,是不是也想知道,甚至说我不区分部门,我还想知道每个公司的平均薪资,我不按部门性别分对不对,甚至说我啥都不分,我只看总的。
04:32
工资啊,平均薪资,你看这些不同的维度是不是都是我们分析中都可能要取的,那这个时候就是适用于上去挨个减少维度,挨个减少维度,那have里面同样也有roll up的用法,对不对啊?那我们来看看Doris里面的用法,我们还得分数据模型来聊,第一个呢,是聚合模型和唯一模型的roll up为什么放在一起讲,因为我们说unique只是聚合模型的一个什么特例,它是不是可以用replace替换了啊?所以我们就一起聊一起聊,那我们以之前创建好的一张表为例啊。
05:10
这这张表就是这个保留明细数据的这张表啊,有一个time STEM字段。来,我们来试一下。我们当时是不是聚合模型,但是实现一个保留明细的效果,因为有一个T是time STEM,精确到秒,不容易重复对吧,不容易一致来了,我们试一下,我们先看一下这张表结构。那我们看看。是不是这几个字段是一个聚合类型对吧?Repair some math me啊,前面几个都是什么key列啊,好,呃,那在接下来。我们先建一个roll up,它不会一个一个卷,它是按我们指定的去卷啊,指定的去聚合,原先我们的key列是不是有这么多个呀,有123456,然后比如说我们就说这个上呗,那是不是。
06:18
现在group by这六个字段,然后求了一个上,这力度是不是特别特别细啊,维度字段极多对吧?那如果我的需求我只想要按其中某几个字段去求some可不可以呢?也可以,这个时候就可以用roll up来我们看一下用out table。ADD,什么ADD roll up,然后给这张roll up表起一个名字,这是我们自己起的名字啊,自己起。那里面就指定你要重新组合的一个维度,比如说。我要查看某个用户的总消费。那就得有什么第一个字段就是聚合字段。
07:00
对吧,第一个字段是聚合字段,第二个字段就是你想要。的那个气力啊。来,我们试试呗。回车。啊,顺序写反的啊,我们要先写那个key列,然后再写那个cost啊好这就OK了啊,我把这边也调一下啊,别忘了我们之前也提醒过对吧,Key列必须在value列的前面啊。好,这个时候我们来再看一下这个表结构信息啊。表结构信息是不是没变呢?对吧。
08:03
看一下啊,对比一下是不是都没有变化。对吧,讲roll up创建出来的,它不会影响基表啊,它是独立的啊,从这里可以看出来没有任何变化,好再往下走。我们怎么体现这个R产生作用?哎,你只需要正常去什么查询你的机表。然后呢?它就会自动匹配到roll up上去啊,我们用explain来查看就可以了,呃,这个表明我忘了替换from。可以。改个表明啊好,哎,你看我们这个查询语句做的什么,哎,我们还是查询的这个是什么基表对吧。因为我们说roll up表对用户是不可见的啊,然后呢,BY。有了ID。这是不是我们的维度列只有一个,是不是就是它?
09:02
对吧,Group by我们这个维度列,然后呢,对cost列做一个什么,做一个some。为什么要做一个sum呢?其实我们这个粗力度的,你想想。比如说这个例子啊,我原先已经有了这么细力度的一个上值,那我现在要。取一个ID name sub,只有这三个维度的score值,那你是不是可以由粗的这个上结果,进一步再上起来就可以了,对吧?由原先细粒度的聚合结果,我再进一步把它聚合起来不就OK了吗?对吧,好。这个就对应了这一列对吧,要进一步的some才可以啊好,那我们来看一下,在里面我们找一找。
10:13
这里能看到roll up,诶你看在这个位置。是不是roll up匹配到了一个什么,这个名字是不是我们之前自己起的呀,这个名字不是自动生成的啊,是我们自己起的,你看。是不是就是我起的这个名字,因为我把它这里绑定啊,绑定了呗。是不是就把这两页摘出来了啊,这样时候它匹配到roll up就可以提高一个查询效率,它直接从那个生成的roll up表里面去查就行了啊。这样就可以减少扫描的数据量,相当于说已经预先处理过了,那么也可以看一下,查看一个roll up的查完成状态,就是受out table roll up这个命令可以看到什么呢?
11:07
啊,简单看一下啊,呃,表明是这个。啊,不对啊对,表明是这个roll up。这个索引名是不是就是我们之前创建的名字啊,然后还有ID事物状态是什么,已完成对吧。已完成的状态,就是我们之前创建的roll up已经完成了,已经有了,这是给大家看一下,看一下另外一个事例。呃,比如说我现在有这种需求,还是原先那张表啊,那张表结构再让大家回忆一下。哎,你看我们这几个是不是都是key列,你看这K这个字段他们都是处对吧,Force的就是value列啊,那么看现在我需求换成这样,不同城市不同年龄段用户的总消费最长和最短页面驻留时间,那这个时候大家可想而知,我roll up里面要指定哪些字段,是不是得需要的维度有什么这一列得要吧,年龄得要吧?啊,这个消费列得要吧?啊,这个驻留时间最长最短这两个字段得要吧,是不是得创建一个五个字段的那个roll up是吧?
12:33
好,那我们来看一看。我这个语句你看out table表明at roll up,然后这个名字自己起的啊,自己起,然后呢,这边字段是不是涉及到的字段都加进来就行了,注意T列要放在前面啊,T列要放在前面,那你看城市有吧,城市。年龄。啊,年龄消费字段消费啊,最长驻留时间,最长时间最短驻留时间,最短驻留时间字段,对吧,你把涉及到的需求相关列都写进去就可以了,来我们执行。
13:22
啊。诶。哦,字段名写错了啊,我看一下字段名叫什么。怎么加了一个timeout?啊,加了一个太啊,这是拷贝错了啊来再来。哦,不是,是多了一个cost,不是删错了,没事,我把字段名改过来啊,你看OK了吧,接下来怎么用呢?是不是key列做KBY,然后value列做对应的聚合呀,对吧。
14:07
注意这个原则啊,就是key列放在key group by里面去查啊,然后value列原先是什么聚合方式,我继续用什么聚合函数就可以了,来我们看一下这个查询语句啊,Group by,城市和年龄,你看是不是根据城市跟年龄这个维度做分析,呃,然后呢,总消费cost字段原先是上,你这里还得用什么,还得用上进一步聚合嘛啊,把细的聚合成粗的,你你不可能给它变了呀,对吧?那最大时间还得用max,最小时间聚合方式是M,那你还得用M啊,这样就行了,来我们瞅一眼。看一下会不会走roll up啊。来,你看是不是走了roll up,这个是不是我们起的那个roll up的名字,对吧?啊,这是对应的,可以看到这个语句肯定是会走roll up的,那么再看看。
15:10
哎,我这边怎么放了两个。啊,这个鱼是对的啊。嗯。那我们再看这一个。啊,不不是啊。这个是啊,不一样啊,不一样啊,看错了啊,看错了,你看那这个语句是什么,我只按照一个什么呢。一个T前面是什么?既有city也有age,现在我只按照一个city,然后其他的value列,我还是对应的聚合方式,Some用some me用me mean用mean啊,看一下会不会走肉啊。是不会啊。对吧,这是他在扫描阶段,他就会走roll up,直接扫这张roll up表就行了。
16:04
好,那同样的下面我们再变了,呃,Group by,还是这两个T列,然后呢,Value列只求了这个总消费跟最小时间,就是这个max我现在不要了,可不可以呢?当然是可以了。再瞅一眼,是不是也走了这个roll up?对吧,这是OK的,就是说你创建的表。你可以不全用,Key列也好,Value列也好,可以不全用。OK吧,好。同样你可以看一下roll up的一个完成状态,应该已经早就是finish对吧,啊,Finish。我们一创建,差不多等一会儿它就完成了。
我来说两句