00:00
接下来我们聊几点建议啊,选择建议,呃,因为我们数据模型要在建表时指定,而且这个是无法进行修改的,那怎么选呢?很简单,如果是aggregate模型。是不是有聚合需求,这个很很好理解。那这样的话非常适合有固定模式的报表类查询场景。对吧,因为一些报表是不是肯定要对一些数据做统计啊,可能是取最新,可能是求和,可能是取最大,可能取最小,那么通过这种预聚合的方式就对我们非常好了。你回头查的时候,一查就已经是愈句和好的啊,那但是呢,要注意他对count新查询不友好。这个在它的限制上啊,我们也会后面也会稍微聊一聊这个事儿啊,你想想count星我们聚合模型有这种模型吗?没有啊,没有。那你想想,你现在想要查的就是一个条数。
01:03
但是你帮我预具盒掉了,那你这个条数是不是就不对了呀。是吧?举个例子,我原先有有有有六条数据啊,我插入进来,你帮我进行预聚合,剩三条了,比如说但是我原先想查的count是想求一下原始的数据条数,我想count一下这个时候你想要的结果是不是六啊,但是呢,现在他帮你预聚和完你1COUNTT是不是变成三对吧,那这个结果是不是就不对了啊,也就是所以其实预聚合模型你就不要去做count,如果有count的需求,你就不要用aggregate模型。好。另外这个唯一模型,它是相当于说对一个组件做了一个唯一约束,对吧?啊,我们前面也演示了。但是呢,他无法利用这个roll up带来的一个查询优势。
02:01
因为它不做呃,也不叫聚合,它是不是取相当于说呃,Key完全一致的其他字段,取最新是吧,相当于replace,那这个对于roll up roll up这种上卷聚合来讲就没有什么用啊,就利用不了啊,当然你也没必要利用,对吧?所以咱们只是说一下the are法后面会介绍啊,呃,那读break这个明细。就是满足任何。这种任意维度的ad号查询,但是它同样是没有利用到咱们这个预具和带来的好处啊。但是它的特点是什么?灵活,不受任何约束。对吧。相当于说这种更灵活,可以你建这种模型,你你未来想对他做什么事都行,其实啊,呃,特别是咱们在运用一些框架的时候,如果它的特点说是使用非常灵活,怎么用都行,那其实它背后的含义是什么?
03:07
有舍必有得嘛,你越是灵活,那你就需要做的事就越多,对不对,也就是说他没有自动帮你完成,其实这个例子很这个呃,思想很好理解,就像我们开车,开车是不是有手动挡跟自动挡。对不对,自动挡是不是相当于说帮你做了很多事儿,所以你开起来就很省事儿,但是如果你是要去做赛车,做漂移这种各种动作,你要通过下水道过弯,对吧,你自动档是不合适的,赛车是不是基本上全手动啊?那同样的道理,我是不是可以说手动挡的,因为它灵活呀。对不对,但是你要手动换挡对吧,一样的道理,行,这个就给大家简单说一下啊,主要是几个点,一个是聚合模型靠新啊,最主要是这个。
04:06
那这个聚合模型的局限性,其实就是这里我们就是对靠星座给展开一个理解啊,下面都啰里吧嗦说了很多事啊,呃,其实就刚才的意思。就有几个字段啊,我分两批次导入这么几条数据啊,这是一共导入了五条数据对吧?那但由于我们定义的一些预具盒最终只剩四条啊,也就是说这里有玉具盒对吧。那这个时候如果我们要做一个count星,那就是我刚才提到的问题,原始数据是五条啊,但是预集合之后剩几条,剩四条,那我这个count星如果给你的是四,是不是说明不是你想要的,所以你就不该在这里做count星,对吧?那但是他如果给你返回一个五,那你做的浴具盒又哪去了?对吧。
05:10
嗯。那所以呢,Doris底层这这个也是做了一个处理,也就是说他在count新的查询,它会扫描所有的系列。并且聚合,也就是说他这个时候需要扫描大量的数据。那这样就不太好了。那我们怎么来处理呢?如果我就是要抗的星呢,它可我们可以增加一个直横为一的聚合类型为上德列来模拟抗德星,对吧?相当于说这是一个转变方案,我就增加一列,那这一列没有什么用啊,然后它每一条数据它的值一定是一,然后我定义为上类型,是不是相当于实现了一个什么count啊,这个是呃,一个解决方案,呃,也很简单,对吧,我们就加一个上类型的聚合列就可以了啊。
06:07
然后给它恒定值为一的,这就说明这个靠的心的问题啊,那还有一个问题就是什么呢?最前面这里如果我们执行与聚合类型不一致的。均可查询。可能是错的。比如说cost这一列,我们。指定的是一个丧类型。但是我在查询的时候,对这一列求了一个最小值,那你得到的结果肯定是错的,如果你看原始数据啊,这是原始数据两批次五条costs的最小值是多少,是不是一呀,对吧?如果传统思维来讲,你想拿到的是一,但是由于要他会做预聚合,聚合后的结果是不是变成这样,你拿到就变成五了,而不是一。那这时候结果就是错的啊。
07:04
啊。
我来说两句