00:00
接下来我们看一下3.4啊数据划分,这中间其实呢,就是在进一步的给大家做一个说明啊里面的一些定义,那首先第一个列。列我们讲了对吧。比较特殊的是一个跟聚合模型相关的东西,这个我前面也说了很多了。呃,就是。我们如果是聚合模型,它是分为T列跟value列。那也就是前面我随便看这个例子吧,就是这种普通的字段定义。啊,前面我框起来这几个是不是都是字段名跟上字段类型是吧?啊这种方式的话一般就是key列,而且呢,我们要在后面这个aggregator key这里去指定这些字段,把字段都列进来就行了啊那这些就是什么key列,那我们说了聚合模型。就是后面这三个字段啊,四个字段,它除了定义名字跟类型之外,还会定义一个它具体的东西。
01:04
什么replace some mass me,这是属于聚合类型特有的啊,聚合类型特有的,那我们其实在义务使用过程中,聚合类型用的是特别多的,对吧?比如说你要求的是明细,或者说要求的最新一条,那replace可以实现,那如果你要求一个聚合累加的结果,那你直接就是定义一个sum就行,求最大,求最小是吧?这也是由于我们的实际需要,它才设计的这个东西。这是一个关于列定义,但是有一些细节啊,呃,细节是什么?我们key列必须在所有的value列之前,就举个例子,呃,这几个是T对吧?Key列这几个是value列,你不能说你value列写在K列的前面,这样是不行的啊,肯定是先定义基础的字段,再定义一些聚合的字段,另外呢,就是一些建议呃,尽量选择一些整形类型。
02:11
就是说比如说同样的数字,你可以用整形来存各种int对吧,你也可以用字符串用呃差差G来存,但是你要考虑到效率,整形的类型计算和查找效率肯定是高于字符串啊,如果你不包含字母符号啥的,尽量还是用整形。还有就是我们类型里面不是有那个定长的差,还有波差对不对,后面是不是可以指定那个长度啊,一个是固定长度,一个是指定最大长度,对吧?一个是不变的,一个是可变的,但呢,这个长度我们每个都写最大值好吗?比如说差我写255,我差我写个655333。啊,没必要对吧,浪费对吧,够用即可啊。
03:00
啊,要节俭一点,过日子不要那么浪费,是不是一样的,都是什么够用即可,够用即可。另外一个就是所有列的总字节长度不能超过100KB。就是key列和value列都是包含在里面的。也就是说,如果你我一张一张表,我设计说有300个字段这种。300个字段,我们说在类型里面最小,最小的字段是不是那个tiny int。哎,怎么拼来着,Tiny in,即使是tiny int,它是不是一字节?那即使你这张表建了300个字段,全部是tinying in的,那也不行啊,超过100KB啊,但是大家要注意的,过宽的还是不行啊,当然一般100KB够我们用了吧,一般是够用,那如果如果你实际比如说你比如说啊,你们目前数仓是基于have的,那现在想上Doris,但是你们have,咱们做数仓的时候是不是经常要做分层,那是不是有一个DWS层对吧?那这里面是不是主要一些宽表啊,那如果你这个宽表比如说就是有200个字段。
04:17
那你们现在要迁移到Doris怎么办?那你拆分呗。对不对。你把它拆分,把这张超级大宽表拆分成两张三张也可以,而且Doris是不是有那个所谓的聚合模型啊,肯定可以给你省一些字段的。灵活一点啊。这是第一个列的定义。要给大家聊的第二一个就分区分桶,分区分桶这个我们前面也聊很多了啊,这就不再啰嗦了啊。分区逻辑上的划分,对吧,我们刚才比喻就是啊,一套房子一户人家对吧,一套房子那分桶呢。
05:04
就tablet就是你把它隔成一个一个的小空间,比如说隔成了卧室厨房对吧,那具体的就是把它分成一个一个的小物理单元啊。那分种方式一般都是哈希对不对啊,这个我们都了解过那。大家注意,这个分区它是可以指定多列的啊,并不是说一定只能一列啊,是也可以多列,而且。分区列必须为T这一列。不能是聚合列吧,你总不能说我我我前面这里,呃,你看我分区字段,不管是list还是range,都是一个前面具体的key列,你总不能说拿这个列去当分区列吧,啊这是不允许的,因为这个是上类型。好,另外一个小细节啊,不管分区列是啥类型,你在写分区值时都要加双引号,不管你是隐形不算类型还是什么类型,你看我们前面这个还是日期类型,呃,比如说这个city啊,一般字符串对吧,所以加双引号大家能理解,那我们再看上面,根据date,那我们看date是一个什么类型。
06:21
Date类型,Date类型,但是我在定义分区的时候,我也要用双引号把它括起来啊,把它包在双引号里面,这是语法要求。不要忘了啊,这是它比较特殊的地方,另外分区数量没有上限,对吧,你想要分区的都可以啊。另外就我们讲的使用单分区,也就是不分区,只分筒的时候,没有爬梯升拜的时候,系统会自动生成一个和表明同名的全职范围的帕,对用户不可见,不可删改啊,所以你也可以理解为没有分区啊。
07:04
那我们分区的时候用了一个range,也可能是一个什么呢?呃,List。那在这边认卷就要给大家强调一下了,认卷分区我们通常是采取时间做分区啊,你像我们hi也好,或者说用click house这种,呃,同样的NP啊,数据库我们通常也有分区对吧?分区一般也是按照日期啊,这是常规做法,但是使用上有一些要注意的地方来。呃,首先看range分区,有一种是less,这个我们见过了,对吧,这是指定上界,它会将前一个分区的上界作为该分区的下界,形成一个左臂右开的区间,举个例子啊,其实举过了啊,看看看这个例子,我把它截一下啊。
08:02
哎,你看第一个分区,这是第一个吧,它是小于2月1号,那他得到的应该就是什么,就是可能是1970年对吧?啊,1月1号一直到。2017年2月1号,因为小于嘛,小于没有等于吧,所以右边是开区间啊,这个是这个分区对应的范围,那第二个分区我们也指定了一个last的是不是它的上界对吧,也就是它最大的地方,那这个分区它是多少呢?由前一个的上界到你的上界,前一个是不是这个,所以我们说二号分区范围是什么?来我们给大家写一下,是不是应该20170201~2017。
09:00
呃,0301右边是开区间不包含这个对吧,临界点这个不包含,那左边是包含的。也就是说,每一个分区是不是都得依赖于前一个分区啊?好,大家理解到理解到这里好吧,那再往下看分区的删除,这个特别重要啊,分区的删除不会改变已存在的分区范围,删除分区可能出现空洞了。你想想,我给这里标个号叫呃123这三个,我们二二号分区的范围是不是取于一号分区的上界,三号分区是不是取决于二号分区的上界,那如果你做这么一个操作,你定义了这三个分区,回头把二给删了。那么三第三个分区,原先的第三个分区会以原先的第一个分区,他们的时间会连续起来吗?
10:03
这就是一个问题,不会啊,不会改变已有分区的范围,那也就是说二号分区这个区间你删掉,那这一段的分区就是空的,就是没有了啊,三号分区该是哪还是哪。那如果你担心这种问题,你还可以用value指定一个范围,同时指定上下键,生成一个左臂右开的区间,相当于说什么写死的。啊,你要担心这个数据呃分呃出现空洞,你就写死啊也可以,那比如说。诶,刚才那个,哎来。下面是一个具体的例子啊,我们来理解一下,根据这个语法,我们生成的三个分区的范围是这样啊,刚才写半天这里就有对吧,你看这是啊,命的最小值到2月1号到2月1号,那下面呢。
11:03
二号分区就是以上一个的上届2月1号到自己的上界,3月1号,第三个分区与上一个的上届,也就3月1号到自己的上届4月1号啊,这个应该都讲过啊,再往下这时候如果我们增加一个零五。对吧,这个名字随便起,为什么没有零四,我就要叫零五?那我less是6月1号,那这个时候会生成什么呢?这个分区是啥?是不是依赖于前一个分区的上节对吧?它是到4月1号为止,那我这个分区就是从4月1号开始,一直到我指定的6月1号,再接下来做一个操作,我将零三给干掉了,也就是这个分区我给干掉了,干掉之后你看有变化吗?首先0102都没变对吧,但是原先的零五跟现在的名字叫零五的是不是都还是4月1号开始啊。
12:04
那这中间是不是漏了呀,也就是说我3月1号到4月1号通天的这一段分区是不是空了呀,这个就是所谓的什么空洞。这就是根据这句话理解的啊,这边是特别要给大家提醒的,使用过程中啊,小心这个坑啊,那继续删除分区也一样啊。那后面这里又继续删除了零二分区的话,那一样的啊,那就剩下这俩了,你看他还是4月1号开始上一个,还是2月1号结束,中间空了俩月对吧?好,那你再增加一个新分区,处于他们中间的范围,比如说你用的语法是小于3月1号。对吧,基于这个基础,你又加了一个,那会变成什么。啊,当然它会按照你这个大小排序,对不对,你的零一还是到2月1号你新增加的零二。
13:07
那就是按零一就上一个按排序一下,按上一个的上届2月1号到自己指定的上届3月1号,但是对零五是没有任何影响。对吧,也就是说可以填回来。这个我就不再讲了,就关于这个空洞,我就多花点时间给大家讲,避免呢,大家回头使用的时候踩了这个坑。那list分区咱们简单聊一句就行了啊,List分区啊,它的分区列。它不是有点像枚举吗?那里面分区的这个字段类型支持啊,布尔啊,啊这些整形啊都支持,日期也支持啊,字符串也支持啊。
14:00
这个都讲过了,不啰嗦了啊。你要增加一个分区,那一样你就相当于多加了一个枚举而已嘛,对吧。这个好理解,这互相之间不会有影响啊好。
我来说两句