00:00
好,各位同学,那接下来呢,我们就进入到咱们数据仓库的第一层,也就是ods层的设计开发阶段了啊呃,那首先咱先回忆一下啊,就是这个ods层它的职责是什么来着?Ods层的职责就是保存原始数据,不做任何处理,对吧?啊,相当于是给我们数仓,是不是去做一个数据的准备啊,对吧?咱把数据先给它放到ods层对吧?至于怎样去处理数据,那不是ods层的工作,那是后边的工作了,对吧?好,那接下来咱就开始去,呃,看一看ods层到底怎么做,那这边给大家列出来了几点啊,这是ods层的这个设计的要点,那现在咱们把这几点给他逐个的读一下来,我们先看第一点,第一点他是怎么说的呢?他说ods层的表结构设计依托于从业务系统同步过来的数据结构,那首先这句话大家应该是能够理解的,对吧?OK啊,也就ods的表结构是依托于我们现在的数据的结构的,没问题,为什么是这样的呢?其实道理很简单,咱们首先要知道。
01:01
我们当前的想到表里边是不是咱们只能是给它往里边漏的呀,对吧?那你要是漏的话,会改变数据的结构,数据的这个内容吗?不改变对吧?那所以说你要想保证我们将来把数据漏到ods层的表里,我们能从表里正确的把数据查出来,那就必须得保证啥呢?你这个表的结构得跟那个数据的结构得是一样的,对不对?OK啊,那这样一来,你把数据放进去,我再才能正确的从表里把数据读出来,对吧?是这样的,所以说ods的表的结构是依托于我们当前的数据结构的,那既然提到这个数据结构了,那大家现在能不能想象到我们当前的数据结构到底是啥样的,所数据的结构就是那个数据的格式啊,对吧?到底是什么样的格式啊?能想起来吗?这个是不是咱们得去实际的看一看下对吧?那来,那咱们现在呢,就打开HDFS的这个外部页面,咱们去查看一眼啊来,我们进到海度1029870之后呢,我们来到这个us,找到origin date,找到J,那大家在这能看到我们的数据大致分为两类对吧?DB和log,那我们现在先看log完之后点击topic log,然后进到零六杠幺四的这个路径,但是咱现在是不是只有这一天的数据啊,对吧?点进去点之后呢,这儿有一个这个t.GZ文件,那这个呢,咱得怎么看,因为它是压缩文件,所以说我得解压查看对吧?好,那现在呢,我们就用命令行去查看一下吧,呃,在这边呢,我们随便打打开一个窗口就行了,我们在这儿呢,执行一个hi loop,然后呢FS,然后呢杠cat对吧,接上咱后边一个路径,后边来一个星匹配所有文件,后边呢,再来一个是不是ZK呀,对吧,直接回车。
02:42
好,那这就是我们当前的这个日志,诶文件里边的这个内容对不对,它就长这样没问题吧,OK,大家现在呃看着可能比较乱啊,对吧,但实际上这里边儿大家得得清楚啊,实际上咱们整体上这个日志文件呢,它每行是一个什么呀。每行是不是就是一条完整的日志对吧?一行就是一条完整日志啊,当然这个日志的长度可能不一样,是不是有的日志可能比较长,有的日志可能比较短呀,对吧?啊是这样的,但是一行都是一个完整的日志啊,一个完整日志呢,它整体它是一个阶森字符串,对吧?啊是这样的,这是咱们当前这个日志的结构,那一会儿咱大家就得琢磨琢磨,我到底怎样去建这个表对吧?我的表这个字段什么的到底怎么设计,我才能去解析这样的日志,对吧?这个一会儿咱们再考虑,这是咱第一种,诶这个数据的结构啊,那除了有日志,我们是不是还有业务数据啊,对吧?来我们再退回来找到DB,但是接到DB之后你会发现啊,实际上我们这里边也可以分两类,哪两类呢?一类是以负作为后缀的,一类呢,是以INC作为后缀的,对吧?以负作为后缀证明我们使用的是什么,是全量同步对吧?我们是用这个叉同步的对吧?那data叉同步的数据结构对不对?和比如说我这个incc是用什么同步的,是max同步对表呃,跟max同过来的这个数据的结构是不是可能就。
03:59
不一样啊,对吧?好,那所以接下来它还得分两类去看,我们先看这个以负作为后缀的吧,随便找一个就行了,比如说我们以第一个为例,好,那这个也是只有一天的数据,这也是一个GZ文件,所以在这儿呢,咱们还得是这样去,呃,解压查看一下啊。
04:13
来,那咱现在呢,去给他查看一眼,我把前面的这个路径给他改一下就行了,删除,然后呢,给他放在这个位置,呃,OK,这个没啥问题对吧,直接回撤,哎,好了,各位同学,那当前咱们是不是就看到了我们这种负,也就是全量表的这个数据的结构啊,对吧?那这是一个什么样的结构?这其实我们要是用呃术语去说的话,这应该是一个TSV文件对吧?啊,就是TSV,还有CSV大家其实应该是呃得了解的啊,什么叫TSV,什么叫CSV啊,首先先说SV是啥意思,是不是separate的意思啊对吧?就是以什么风格的一个视图,一个文件对不对啊,OKT在这指的通常就是那个type键杠T对吧?那C呢,通常指就是call嘛,也就是逗号的意思对吧?啊是这样的,那咱现在显然是诶杠T风格的一个文件啊,OK好,那所以我们这其实一个TS文件好了,那将来咱是不是就得考虑一下,诶那这样的文件我应该怎样去设计表对吧?哎,才能正确的识别啊,这也是咱们一会儿要考虑的问题。
05:14
那那这个咱就搞定了,接下来我们再继续往下走,还有另一类表,就是以INC作为后缀,咱也是随便找一个就行啊,比如说就它来给它CTRLC拿过来之后呢,我们放在这个位置查看一下,呃,J开后边呢,我还是把前面删了吧,来走。啊,拿过来,拿过来之后呢,我们直接这个来个回车走好了,那这就是以INC作为后缀的这个,呃,文件里边的数据的内容啊,那大家来看一下,这其实看着也比较乱,对吧?但是整体上呢,这一行就这个文件当中啊一行,它也是一个人嘛,也是一个杰森字符串吧,对不对,它也是一个尖子,因为大家都知道Maxwell的输出是不是就是一个杰森字符串啊,对吧?啊,当然这里边呢,呃,字段都是哪种字段,我现在就不再多说了,咱们现在先大概了解一下这个结构就行了,后边我们真正去设计对应的表,在这儿咱们再去详细的看里边的字段,那就完事了啊好了,那这个呃,数据的结构咱们目前大家应该已经都有点数了,对吧?咱们可以分为三种对吧,分三种躯干日日,加上这个业务表当中的全量表,还有业务表当中的增量三种结构,好了,那接下来咱继续往下进行啊,那下边呢,我们往下走,第二点是什么呢?第二点这这边要讲的是什么啊,它讲的是我们ods层的这个表的数据的存储格式。
06:31
啊,什么意思呢?实际上这个道理很简单,大家来想想啊,你说我们将来要自己去设计一张表的时候,对吧?我们除了要去明确我这张表它每行指来的是什么,那它的字段有哪些,我除了要明确这些,呃,逻辑上的结构,我还必须得明确什么呢?就是我这个表下面的文件的存储格式吧,对吧?因为每张表是都会对应H几个文件,对吧?那个文件到底是什么格式了呢?这个其实在不同的层也是有不同的要求的,那我们现在就先看OD层它是怎么要求的,ODI层的要求其实相对来说比较简单,他不会要求说什么你必须得列着存储啊,也也不会说要求必须得怎么样,诶,他没有这样的要求对不对?那它只有一个要求,那就什么要求呢?来看一眼,就是它要求我们这个压缩格式得是一个压缩比较高的。
07:19
啊,是这样的,什么叫做压缩比较高呢?呃,很简单,假如说我这儿呢,有一个100G的这个文件,对吧?OK,那你压缩完之后,诶,我只剩下十个G了,这就叫压缩比较高对不对?那你100个G,我压完之后还剩90个G,那你这个压缩比就不行,对吧?就是这个意思啊,这一点大家稍微的体会一下,那就是我们ods层呢,在这边有一个要求就是啥呢?应当尽量的把这个表下边的文件是不是压得更小啊,对吧?诶大家想想,你说他为什么要有这样的一个要求呢?其实文档也给出来了啊,它是什么呀,ADS层它要保存全部的历史数据啊,是这样的,就是ods层呢,它相当于是做一个存根对吧,做一个备份,我所有的历史数据,我在ods层都要永久的保存,对不对,那所以说呢,即便是我们是一个大数据集群,对吧,即便HDFS是可以无限的扩展的,对不对,那我ods你要保存那么久的数据对吧,十年20年甚至更久对不对,那所以说这边咱说应当尽量的把它的这个数据压得更小一点,对吧,就是你集群规模在大,你老存老存,那那其实也不太好对吧?那所以这边呢,我们应该尽量的给他,诶呃,压缩的更小一点,那这就是ods层的这个数据存储格式的唯一的一个要求啊,是这样的,哎,那我们这个,呃,哪个压缩格式它的这个压缩比比较高呢?哎,那在这儿呢,咱们选用的是GZ吧,对吧,那实际上大家都知道我们hi度是支持很多这个压缩格式的,但是不同的压缩格式他们有自己的是不是特点呀,对吧?呃,比如说举个例子,那s snapy它的这个特点是什么呀?是速度比较快压缩。
08:47
压缩都比较快对吧,那还有一个就是拉斯罗也比较典型,那它的特点是什么呀?是支持麦普多的切片对吧?OK,那完了之后呢,咱这这个GZ呢,它其实就是什么,就是压缩比是比较高的啊,这一点咱们要搞清楚,所以在这儿呢,咱们得根据自己的需求去选择相应的压缩格式,在这儿咱们统一选用的是GZ,其实现在大家应该能想明白了啊,就是为什么咱们前面的对不对,最终那个啊,就是咱数据,比如比如说日志,比如说那个业务表的增量表,最终是不是都通过flu把数据写在HS呀,对吧,那你里边那个HD s think,咱的压缩格式当时选的就是什么,是不是G呀,对吧,包括那个data叉压缩格式是不选的也是GZ嘛,对吧,为什么?就是因为我ods层这边我要使用GZ吧,那所以他那边传上来就必须得是GZ才行,对吧,那因为它是传上来之后是不是直接漏的过来的对不对?哎,是这样的,这一点大要给他搞清楚啊,行大接来继续往下走,这一点其实比较简单啊,我们是不是只需要我们一会儿再去做的时候遵守一下就完事了,对吧。
09:47
比较简单,下一个看第三点,第三点其实也不难啊,第三要讲的是什么呢?是ods层表名的命名规范,那其实我们每一层这个表明你都不能随便起,它都是有相应的规范的啊,是这样的啊来现在我们看一下ods层它的规范是什么?Ods层的表明的命名规范是ods啊,这个当然是一个什么呀,是层名对吧?你只要一看到这张表的表名,你就知道它是哪层的了,对吧,就是一个层的标识尽量往下走,表名,这个表名指来的就是什么。
10:18
就是我们业务系统当中的表名,听下来家知道ods层的表是不是跟业务系统的表是一一对应的呀,基本上是是对吧?OK,那在业务系统当中我们那张表叫啥?OK,那我就把这个表名呢,放在我这个ods层的这个表名的第二部分啊,是这样的啊好,那接下来我们再看最后一部分,最后一部分是什么呢?是单分区增量全量标识,诶那既然咱们这儿看到了这个所谓的分区了,对吧?那就意味着什么?是不是意味着将来咱们ods层它这建的表一定是什么表,一定得是分区表对吧?OK,好,那为什么ods层表我们一定都是分区表呢?这个是为什么呢?哎,其实这个道理很简单,首先咱得先搞搞清楚啊,就是咱们将来把ods表建好了,数据是从哪来的,数据是不是都是从咱们这样的一个一个的路径下边来啊,对吧,比如说那对应这个路径我会有一个ods in列表,对吧,没问题吧,好,那说大家要知道啊,就是我们这个路径下边现在当然只有一天的数据,但是。
11:18
是不是每天是不是都会来一个路径啊对吧?14号会有14号路径,15号会有15 16 17 18,是不是依次类推啊,对吧?好,那完了之后,我们这个路径下边的每一天的路径就正好会对应ods层的那张表的,是不是每天一个的分区啊对吧?没问题吧,OK啊,是这样的,那所以到时候呢,我14号的数据会放到ods层表14号的一个分区当中,对吧?那15号的数据呢,会放到我们15号的诶这样的一个分区当中,诶是这样的,正是因为我们这儿路径是一天天的,那ods层的表我们理所应当是不是设计到一天一个分区啊,对吧?所以ods层的表呢,咱们都是分区表,那通常就是按天分区,是这样的啊好了,那之后我们继续往这儿走,那完之后我们第三部分到底是什么呢?是你这个分区,它是增量还是全量的标识,诶一个是负,一个是INC,其实这个跟谁对应就行。
12:11
是不是跟我们all data这个路径对应就行,对吧,你这是IC,我对应到那个表的分区上边,那那是不是也是IC啊,对吧,就这个意思,这一点大家理解一下行了好了,那其实这一点也不难,只是我们在建表的时候,是不是遵循一下就完事了呀,对吧?OK,那也就是说在这儿呢,咱们这三点当中核心应该是哪一点,是不是第一点呀,对吧?那下边我们要要要要去,呃,具体做的工作呢,就是到底如何根据这个所谓的数据的结构去设计咱们那个ods层的表的结构,到底怎么设计,OK,那咱接下来呢,就进入这个主题啊来视频我停一下。
我来说两句