00:00
接下来我们看一下数据模型啊,前面一直聊了很多数据模型,对吧?啊,现在好好了解一下Doris的数据模型主要分为三类啊,分别是聚合模型啊,这个前面提了很多次,还有唯一模型,也就是去虫模型,还有这个doate是重复的意思,对吧?但这里我们理解为明细模型,就是说数据允许重复也不聚合,就是明细原来什么样成什么样,那我们先来看一下这个聚合模型,这个应该是用的非常多啊。聚合模型那表中的列按照是否设置了聚合类型分为T列和value列,这个我们在前面已经谈到了,对吧?再回忆一下吧。比如说就这个例子。啊,全结了吧。来往下走,你看我们当前这个例子啊,那前面这些就是所谓的替列对吧,那后面这几个就是所谓的value列,为什么呢?哎,我们说除了字段名跟类型之外,它又单独定义了什么replace。
01:16
还有some max me,那这种呢,就是指定的聚合类型,那所以下面这种就是value列,上面这个就是key列,并且聚合模型一定在后面有一个什么aggreg key指定key列啊。就把前面这几个列都给它写进来就OK了。这个就是聚合模型的直观体现啊。那么具X来了解一下。四种续和方式来,其实我们案例里面都有体现啊,一个是上求和。一个是replace,是替代。
02:00
我们挨个来看吧。Some呢,就是呃,会进行累加。进行累加。那。相当于说我做了一个group by some能理解吧,它的作用就相当于根据我前面指定那些key列,Group by这些维度列。然后呢,做了一个上。就是我指定为some类型的这一列,比如说这个就是cost。相当于说你写了一个这种circle,但是在do里面就不用啊,你直接指定一个聚合类型,然后这边指定为some这种value列就可以了,它就自动会完成group和some的这种操作啊。那replace是什么意思呢?Replace是不是代替替代的意思啊,其实就是什么,下一批数据中的value会替换之前的value,说明这个replace是什么,只保留最新的一条。
03:01
对吧。相当于说我们做了一个group。呃,然后取第一条。下来开窗取第一条有点像吧,Group,然后取每个分组的第一条啊,那这就是啊不最后一条啊,最最最最新一条啊,最新一条。然后肯定要跟上一个order对吧。这个就是一个应用场景,这个应用也也比较多吧,啊,但它还有一个叫replace if not now,遇到not值时,它不会去替代更新掉,也就是说我新来这条数据是个now啊,那我不会把它替代掉,那麦克同理可得,相当于说我按照key列做了一个group,然后呢,根据group的。这个每个分组我取一个最大值对吧,那取最大值的列就看你上面是哪个value列了啊。那同样最小值一样的道理是吧,那这种场景我们在分析中非常常用啊。
04:06
那他这些相当于说是不是相当于帮我们做了什么预聚合呀。正是因为有预聚合,而不是等到说你需要的时候才去聚合,所以它才能达到一个什么对实时场景的支撑,对不对?你想想吧,呃,来一什么叫就相当于有点像来一条处理一条对吧,也可以是来一批处理一批。那这样是不是就能。那现在我需要查这个结果,我是不是直接查就能达到。拿到一些预聚合的结果。对吧,不用像做离线的时候说我做T加一,我等一整天的明细数据到了,我才开始做group,才开始做sum,才开始group by取最大取最新,才开始group by取最大最小,那样的话,你这个计算的时间延迟肯定比较大,对吧?啊,因为你要处理全量的数据。
05:02
那这种聚合模型就非常适合我们这种分析场景啊,指标计算的时候这个特别常用啊,也认为这个特性才能很好的满足实时性的要求来,那数据的预聚合发生在几个阶段,第一个每一批次数据导入都会进行聚合,比如说我这一批次导入ABC。啊,三条数据啊,三条数据是一次导入,也就同一批数据,好,那根据我定义的这个聚合类型,它会对这批数据就按照聚合类型去处理啊,比如说我要的replace,那肯定是保留最新的字段值啊。还有一种就是be底层进行合并的时候。它会对已导入的不同批次的数据进一步的聚合。比如说我第一批次导了ABC3条,后面我又导入了第二批次A。
06:01
De,这个批次。这是不是两批数据啊,那这两批数据之间是不是也得啊,按照我们定义的聚合方式进行聚合啊,这个也会还有第三种数据查询阶段,为什么有第三种呢?大家想一想。如果。我们还没有compassion的时候。他肯定不是无时无刻compassion,那这个时候我要查了。但是他还没帮我提前预计和好,那这个时候岂不是会出现啊,结果不正确的问题嘛,对吧?啊,所以他设计了一个什么,最终的保证数据查询阶段,如果我执行查询。对涉及到的数据也会强行进行聚合,可能这个时候还没到合并阶段,但是我要查了,那你查的时候,它就会相当于说强行触发聚合,强行触发它的聚合逻辑啊,就是由于第三个这个保证才能,呃,保证对用户而言只查到聚合后的数据。
07:08
你不可能查到未聚合的数据,对吧?啊,这样你才能保证结果的一致性啊。所以啊,用户始终认为数据是以最终的完成聚合程度存在啊,也就是说你不用去等合并这个问题。如果了解过house应该就。比较熟悉的对吧,我们经常碰到一个场景,就是肯定house怎么保证。呃,数据是呃一致,呃,它是一致的。也就是说没有重复的,我们知道click house这个框架呀,这个数据库啊。它是也有分片的概念,它是不是等到也是进行底层合并的时候,才会真正的去重。比如说你用了一个去虫表引剂啊,如果了解应该就知道啊,简单提一嘴,他是不是只能保证最终一致性对吧?但是如果你查的时候,他并没有达到它的分片合并的时候,那可能这个时候即使你用了去虫的表引擎,你查到的数据仍然可能存在重复。
08:12
啊,那如果对于DOS来讲呢,你只要查询它就会强行进行聚合,对吧,保证你查到的结果一定是聚合后的结果。你就不用担心这个事了,对吧,那其实click house也有对应的功能对吧,比如说那个final啊,行啊,House可能有的不了解,那你就呃,就听听就得了,好吧,那了解的应该就有体会。好了,这个是聚合模型。啊给大家多讲几句,因为这个比较重要啊,也不是比较重要,因为比较常用。而且大家担心的这个数据一致的问题,结果准确性来讲啊,不用担心啊,因为他查询,只要你查询一定会触发聚合。
09:00
给你的结果一定是。对的,准的。好了。这是对于呃,聚合模型我们一个理解啊。
我来说两句