00:00
好,呃,那接下来呢,T我们就不多聊了,因为大家是最熟悉的就是T对吧,他呢默认不做压缩啊,SPA开要不要大呀,可以结合这个压缩方式来使用,对吧?其实其他的文件格式当中呢,它默认就这种格式,就比tcel存储的时候呢,数据量就要小一些啊,就要小一些,好,那我们来看一下啊,嗯,Orc格式orc它是一个列式存储啊,它是一个列式存储,呃,但是呢,跟我们刚才所聊的这个列式存储啊有一点点区别,刚才我们在聊列式存储的时候,是不是说的把这一个列存完再存下个列,但实际上生长环境当中,你想一下嘛。我们数据的行数既然存到HDFS,那么它的行数必然是怎么样?非常多的对吧,如果真的他把一个列存完,再存下一个列啊,就算你把列与列分开,那你这个文件也特别大,所以呢,其实他不是说真的把这一个列存完,而是分段。
01:11
Striped,或者叫strip。啊,也就是说它默认的它1万行就是这个表啊,行数特别多,我就干什么呢,我把这个表呢,分成多段,我对这一段内容进行什么进行列式存储,对这一段内容又进行什么列式存储,能理解是能理解这个事,他不是说哎这个是A这个列,我从上到下把这个东西全部存完,再去存下个列,而是干什么事啊,在这个所谓的trip里边。我们是对于这1万行数据做什么,做列存,然后对下100行数据又做内存啊,既然这样的话,那我要找数据的时候,假如说我要找一个列,是不是要跨多个STEM,所以那我怎么快速的定位到stream呢?所以它里边在对于整个的这个文件而言,有一个所谓的索引。
02:06
就记录了当前这个strip,它是从哪一行到哪一行,是这样的东西索引啊,然后根据这个索引,是不是假如说定位到这一了,这一当中呢,还有对应的什么,所以哎,你这个第一列。是从哪到哪的对吧,第二列是从哪到哪的,他建这些,所以都是为了方便我们干什么定位数据的对吧?查找数据的啊是这样子存的,而中间的这个肉呢,肯定是不用说存什么东西的,存真正数据的吧啊存真正数据的啊,所以呢,他是这样来存的啊,就分块啊分成块的,因为大家现在就是咱们是大数据啊,其实Java那边呢,会讲那个,呃买斯克所谓的一个高级,高级当中呢,会讲给买斯克去见索引,而且呢,当买斯克表这个列特别多,或者说行特别多。
03:04
还可以拆表。那列特别多的这种表呢,我们把它称为叫宽表。宽嘛,宽表,那宽表我们要干什么,竖着切,竖着切,哎,假如说我我总共有呃几百个列,500个列,我把100个列存一份,101~200存一个,对吧,给它分开,那如果说行特别多这种表叫什么?刚才我们这个叫宽表,这个叫什么?后表它叫高表,它叫高表啊高表就是行特别多,是不是看起来特别长啊,对吧,那就怎么样横着切,那这个地方,它这个存储方式是不是符合我们所谓的高表这种方式,对吧?横着切开诶1万行一存,1万行一存,那这个原理都是相通的,到后面大家学那个的时候,你会发现呢,它就有既有竖着切又有横着切,因为啊,它是支持百万列千亿行。
04:05
但其实公司当中不会有这么多这么多列,最后你都疯了,你怎么查呀,但是他是支持的,就是从原龄上他支持的就是因为,而且呢,对这么大一个数据集,他还能做到秒级,它就是因为他把数据给他干什么,分开了,见了很多索引,你就找数据的时候呢,快速根据索引定位到这一小块,看着好像你查的是一整个大表,对吧,但实际上最后定位就这么一小块,就类似于分区表,这种感觉是不是对吧?那我看着这个表呢,可能这么大,但是呢,我可能存了两年的数据里面有700多个分区,那我查的时候我定位到分区,假如过滤存段当中有分区,为什么就找这一小个分区啊,对吧?那当然效率高呀,对吧,是这样的一个情况啊,所以说都当中呢,它会建很多的一个,所以啊,而且你越往后学,多往前面学的东西想一想,其实在整个编程当中啊,很多的思想都是一样的,就原理是一样的。
05:06
啊,原理一样的,好,这是我们所聊的OC啊,这个不用过深的去掌握啊,说我去找一些帖子,OC到底是什么样子的,对吧,里面用了什么算法,不用面试的时候呢,也不会问他只会问你,诶你在工程当中用的这个文件格式是什么样子,你跟他说orc的,其实基本上到这个程度就OK了,而且你要知道它是列存的啊,它是列存的,好,这是OC,呃,那帕的呢?也是也是列存,而且呢,它也是根据这个刚才我们说的,他不是说把整个列全部存完再去存的,然后呢,它当中呢,也是分。横着切的,这里面就有一个概念叫什么。叫行组,叫行组啊,每个行组呢,包含一定的行数,是不是跟刚才我们所说的在OC当中切的那个strip不是一样的道理吗?对吧,它也是这样子啊,所以呢,有行组,然后中间呢,还有这个列块。
06:09
啊,还有裂块,它的效率呢,可能更高一点,为什么呢?因为我们知道它分裂块了,把一个列呢,分成独立的一个列块,在行组当中分成一个独立裂块,而对于一个列而言,它的类型是不是一定是一样的?对吧,它的类型一样的,因为这对于很多不同的类型啊,它是要采用不同的压缩算法的。或者编码方式的对吧,而我们在它配的文件格式当中呢,你又分成了列块,那我对于同一个列块当中,我采用的压缩算法呀,或者说它的一个编码方式是不是就统一就好了,我可以根据这样来更细力的划分不同的类型我用什么不同的压缩算法,所以它在存储方面的效率会更高一点啊,但是从原理上根本上来讲跟RC没什么区别对吧,也是,那只不过说刚才OC里边叫stream,而我们这边叫什么?
07:07
叫行组班,就是一个名字不一样,其实本质上是不是一个东西。不是吗?对吧?啊,刚才我们所说的这它1万行放在一个string里边,而现在所谓的行组,它也是指定了一个什么行数放在一起的,只不过说它当中呢,还有一块啊,它这个文件格是这样的啊,这里边呢,首先有一个行组。对吧,这行组一,这还有什么行组二,这个就相当于把我们表横向一刀给他干什么,切开了对吧,你表特别高的时候,我们大家说高表对吧,特别高的时候横向一刀给它切开,切开之后呢,发现这里边这个。就是我们叫车位叫什么?AB这个叫裂块。叫裂块,哎,他对于这个东西呢,可以单独的使用不同的什么压缩算法,当然这中间呢,也会涉及到一些什么配置,嗨的所所谓的那个头信息,对吧,Y6真正的什么。
08:07
数据对吧,啊数据啊等等这些东西啊,还是一样还会去建一些,所以啊,你要知道这个那些东西了,它配的文件格式呢,呃,倒不是have当中用的有多少,Have当中其实用的最多的是RC生态环境当中呢,在大家学到Spark的时候会用的多一些,因为Spark它默认的文件格式认得啊。啊,默认的,因为SPA当中呢,它对于这个PU配的这种文件格式啊,它做了特殊的处理,就是说在解析过程当中做了特殊处理,效率会更高啊,所以这两种呢,我们要去指导一下啊,到Spark的时候呢,我们还要重点去了了解一下这个把馈的这种格式啊,这两种列存,但实际上我们说的它不能叫真正意义上的列存,因为它是按行划分开,然后根据指令行用这一小块一小块的去做什么做列存的啊,它是这样的,当然呢,我们为了方便能找到我们所需要的数据,它是借了什么?很多的索引啊,借了很多索引是这样的东西啊。
我来说两句