00:00
啊,来吧各位,那接下来呢,我们呃,就可以正式的去设计一下咱那个日志表了,对吧?那当然设计日志表呢,我们说还是得看着那个完整的呃,这个日志结构去进行设计啊对吧?好,那所以咱接下来呢,就看着这个日志的结构去设计,那但是大家要知道,就是我们那个日志文件当中,也就是刚刚我们看到的这个origin data这个路径下边,对吧?咱那个日志文件里边是只有我们刚刚看到的这样一种结构的日志吗?是只有这一种结构吗?是吗?并不是,对吧?那我们那个origin date里边是不是有两种结构的日志啊,对吧?对,有的可能是这种页面日志,是不是还有一种是启动日志啊对吧?它俩分开的,没分开,它俩是不是混杂在同一个文件里边啊,对吧,既然混杂同一个文件,那将来我们是不是就是得把它俩是不是导到同一张表里啊对吧,同一个文件是不是得进到一张表啊,对不对,那所以说我们再去设计这张日志表的结构的时候呢,我们就必须得兼顾这两种结构的日志是不是才行啊,对吧啊,那所以说现在呢,我们还得。
01:00
再把另外一种结构的志也拿出来,我们呃去找一下啊呃,我们找到这个日志的文档,找到启动日志,这是一条完整的启动日志的结构,来把CTRLC拿出来之后呢,还是对它进行一个格式化啊来CTRLF,呃,直接选中删除CTRLCTRLC,那那现在呢,我们给它拿过来放在这边啊呃,我再开一个这个杰森美化工具啊来拿过来好OK,那这就是我们的第二一种结构的日,也就是咱们那个是不是启动日啊,对吧?好,那现在呢,我就把它给它盯过来,F3盯在这,然后呢,我们对照着去看一下。对吧,也就是我们现在要去设计一张积分表,它得能够兼容是不是这样的两两种日志才行,对吧?好,那现在问题来了,这张表到底怎么设计,怎么设计,还是就去具体去确定一下咱们有哪些字段,然后每个字段的类型是不是就完事了,对吧?来吧,确定一下吧,首先需要有哪几个字段。能不能只有能不能只有这样的六个字段,能不能,那肯定不能,对吧?那你得把这两边都兼顾啊,那都兼顾的话,来我们对比一下,那首先这儿有一个carbon,那我右边是不是也有common对不对,而且这俩carbon是一模一样的对吧?好,那尽量往下走,那action这边有,那那边没有对吧?那这个配置这边有,那边也没有,那这边有一个error,这边是不是也有一个error,那这有个TS,那边是不是也有TS对吧?那也就说我们右边这种结构啊,啊里边三个左边都有,只有一个表,也就是12的对吧?那所以说我们这要设计这个表,我们怎么设计就行了,我们是不是选七个字段就完事了,对不对,应该是这六个字段,再加上右边的那个star的七个字段就完事了,对不对,OK,那七个字段可能会出什么问题啊,就说OK,我这有七个字段对吧,那我是不是就会出现一个OOK,我表的字段跟我接森字符串,它里边的字段是不完全一致的一个情况啊,对不对,OK,那这个会有问题吗?没问题,我们刚刚是不是已经测试过了,对不对,这是没有问题的,OK啊,那只不过就是将来我们把这些数据漏到这张表里,它可能会出什么情况呢?比如说对于这种。
02:53
页面日志而言,Start字段的值都是啥空对吧?那对于这种启动志而言,对不对?那些什么X呀,Display配置是不是都是空啊,对吧?诶,这个其实没有任何问题的,对吧?哎,这一点咱们给它搞清楚就行了,OK啊,行了,那截止到现在呢,我们这个最终的表的这个字段就算是确定下来了,字段确定下来之后,咱们再来确认最终的这个字段类型啊,OK common应该是什么类型,咱们就用结构体类型是不是比较合适对吧?好,那现在往下走,这个action呢,结构体数组对不对?那它呢,是不是也是结构体数组对吧?那这个呢,结构体,那这个呢。
03:27
结构体呗,对不对,那这个呢?哎,那就是来一个是不是基本数据类型,来一个in就行了,对吧,那start其实也应该是什么类型start。也是结构体吧,对不对,OK啊好了,那目前为止咱们这个字段的结构基本上就确定下来了,好,那现在呢,我们打开文档当中最终的这个解法语句啊,那现在呢,我们直接看一下就行了,这个东西咱没必要自己写啊,来来拿过来,拿过来之后,前面这东西其实就没啥用的,我都给它这样吧,我都给它注了吧,就给它注掉啊好,注掉,那么我这个P森表其实现在也没啥用了,对吧?啊,咱们就不要在这个J帽库里边去建乱七八糟的表,因为J帽库是咱们书仓的库对吧?那这个直接右键,然后呢,这也有一个照板,你直接给它删除就完事了啊OK啊,好,那上来之后,咱接下来呢,就看一下我们第一张这个日志表,来咱们一起看一眼,首先我们先来熟悉一下它的这个表的表名,那表名叫什么呢?叫做ods log INC,它符不符合咱这个表名的命名规范呀,符合第一个是ods层名对吧,那log呢,是这张这个表名对吧?然后后边in ciinc,也就是在这,咱们实际上是给它作为什么呢?作为增量的对吧?那其实咱们前面讲过日志,我们之前分增量和全量了吗?
04:37
肥粉,但是我们要是硬分的话,它其实应该属于增量对吧?所以在这呢,我们也加了一个INC啊好,接下来咱继续往下导,下边呢,我们来熟悉一下,就是咱们这张表的这个具体的表结构啊,OK,那又提到表结构这个概念了啊在MYSO当中,我们要提到表结构,那指的就是行,还有列是不是就够了呀,对吧?但是在have当中对吧?那我们数仓里边的表,尤其是啊,都是分区表,那所以说我们今后再提have表当中表以后,我们就就得从三个方面去考虑的,那就是啥呢?行列还有什么呢?还有它的分区规划啊,分区规划就是说你得明确我到底是按照什么去分区的,我得知道每个分区里边存的是什么数据,对吧?咱们把这个也得搞清楚啊,OK啊,也就是以后再说表情就是行列分区啊,那现在咱们来明确一下,就是咱这张表它每行将来存的应该是什么。
05:28
一行签上表,一行对应的是不是就是我们那个日志文件里边的一行,说白了一行就是一条日志呗,对吧,这个日志可能是启动,可能是页面日志对吧?好,那这个行很简单,接下来我们看来看一下它的列字段啊,那字段呢,我们一共有七个字段,对吧?是不是正好就是common page啊,加上他俩加上他们仨呀,对吧?诶就是那七个,这个我就不再解释了啊,然后呢,我们再重点看一下它们字段的类型分别是什么,Common是不是就按照我们所说的是一个结构体类型,那结构体在定义的时候啊,它是不是得有字段,得有字段类型,字段字段类型啊对吧,这个大家说根据谁确定就行。
06:04
咱自己,咱假如我要自己去写这个界面,就跟谁确定,你就对照这个杰森日志去写是不就完事了,对吧?是跟他是完全一致的就行对吧?OK,那这个我就不再一个一个去对照了啊没问题,配置是不是也是同理,结构体,然后往下走,Action display是不是就是结构体数组,结构体数组对不对,这这个是不是咱们也就不用多说了,对吧?哎,照着去去写就完事了,Star也是一样的,I也没啥区别,诶TS就是一个begin,诶好了,那到目前为止这个字段咱也就说清楚了,最后再来明确一下它的分区规划行列分区嘛,对,好,那再来看一下我这儿是不是有一个part的BYDT这样的一个语句啊,对吧?OK,那这个实际上是按照谁分区呢?我们是按照DT这个字段进行分区,对吧,大家都知道啊,这个分区字段实际上也可以当做一个什么字段去使用。就是当做一个普通的字段去使用,对吧?我们管它叫做一个什么字段,叫做一个虚拟的字段,对不对,是这样的啊,那也就是说实际上呢,相当于咱们这张表,你要算上分区字段,一共有几个字段呢?一共有八字的,哎,是这样的啊,这一点大家不清楚啊,好了,那接下来呢,我们来明确一下,那咱这个分区的规划到底是什么样的呢?我到底是按照什么分区呢?在这儿咱们其实就是按天分区的,一天一个分区,那每天的分区里放的应该是啥呀?其实很简单,是不是就是我们每天同步过来的日志对不对?你这个表的分区跟谁是一致的来着,是不是跟咱们这个路径下边的每一天的这个路径是都一样的呀,对吧?OK,那我这一天的日志我就放到表里边,这一天的分区当中,这一天的日志我就放到这个分区当对吧,是一一对应的,那这其实就是ods层,咱们这张表的这个分区的一个规划,这一点咱们给它搞清楚就完事了,OK啊,那实际上呢,大家应该得知道啊。
07:43
不好意思啊,嗯,那实际上大家咱们得大家得知道啊,就是我们ods层所有表是不是都是分区表啊,对吧,那其实不管是嗯什么样的表,你是这个日志表也好,还是将来咱们建的那个业务表,对吧?业务表你分全量和增量的吧,甭管是哪种表,他们的分区规划都是一样的,Ods的表分区规划都是一样的啊是这样的,都是什么样的呢?都是一天一个分区,那每天分区对应的就是啥呢?是不是就是我们这个路径下边的,那比如说咱们找找一个后边的,比如找一个业务表,对吧,是不是都是这个路径下边的一个路径啊对吧,一个分区对应这样一个路径,一个分区的一个路径,只不过呢,就是我不同的表啊啊对吧,我这个每天的分区里存的东西可能是不一样的,对不对?你对于日志表而言,你每天的分区里放在少是不是当天产生的日志啊,对吧,那你要是对于我们这个业务表而言呢,业务表是不是得分全量跟增量啊,对吧?那我们先说全量,对于全量表而表而言,你说将来咱们这个表建好之后,我每天的分区里放的是啥?是今天新增的数据吗?
08:42
不是因为你是全量,是每日全量对吧,所以说你将来这个全量表对吧,那每天的分区放的这就是当天的全部数据对不对,那对于增量表而言呢,增量表而言,你是不是每天的分区里放的就是啥呀,是不是就是当天是不是新新增的数据啊,对吧?但然对于增量表而言,还有一个特殊,那他第一天是是新增嘛,第一天不是第一天是全量对吧,是这样的啊,也就说咱们的分区规划基本上都是诶一致的,基本上只只不过将来可能就是你每天往那个分区里放的数据是不太一样的啊,这一点要搞清楚啊,行了,那到目前为止呢,我们这个日志表的表结构就算是明确下来了,行列分区都清楚了,对吧,那也就是这张表的逻辑结构,咱们就清楚了,最后呢,我们再来看一下什么东西啊,就是咱们这张表的这个存储格式啊,就是里边是不是最终是文件啊,对吧,存储格式存储是什么呢?是不是就是存这个阶算诶文件就完事了,对吧?好弄完之后我们继续往进行,下边还有一个宇宙是什么?是location,在这我们是不是声明了一下,咱们这张表在HDFS路径是什么呀?对吧。
09:43
Warehouse j Mo OD sod INC啊,实际上这是我们这张表所对应的路径,这一点大家要搞清楚好了,各位同学啊,那截止到现在呢,那我们这张表的见面语句就开始说完了,但说完之后,大家细心的同学可能细心的同学可能会发现一个问题啊,什么问题呢?
10:00
压缩咱们声明了。没声明对吧,因为咱们ods有要求,我们说必须得采用什么GZ压缩,对吧,但是我这我声明这个压缩格式嘛,根本就没有对吧?诶,那这样行吗?行不行,这样行不行,其实我们可以去看一下have官方是如何去说明这个事儿的啊啊OK,那我们还是来到这个,呃,Language menu这个位置啊,来到language位置menu之后呢,我们找到哪找到这个位置,大家看这这是不是有一个compress的data storage对吧,对吧,是不是压缩数据存储对吧?那点进去看一看它这是怎么去介绍这个压缩的,好,那现在呢,我们先把这个呃话给他读一下啊,比如说我们先读一下这个第一段话,呃,这个其实读不读都行啊,比较简单,来看一下能不能读懂,他说keeping date compressed in have tables什么意思?是不是在have表当中保持数据的压缩对吧?In some case在某些场景下对吧?啊,这个be no被证明,被证明怎么样?是能够是不是有更好的性能的呀,对吧,比谁更好的,是不是比不压缩更好,对吧,这个其实不用,不用他说咱们也知道,对吧,这个咱就不读了啊,现在往下走,咱们看看哪下边这句话比较关键,诶把这句话读一下,他什么呢?他说你可以import test fields compress with,是不是Z或者是b zip to啊对吧,什么意思,你可以把使用GZ或者是b z to压缩的文本文件,对不对,怎么样呢?Directly是不是直接给它导到一张have的表当中啊,对吧,一张什么样的表呢?诶,Start as test fill的表。
11:32
对不对,也就是假如我这有一张表,我的存储格式是start as test file,那你就可以直接怎么样,直接把一张使用BZ,呃,直接把一个使用GZ或者是b z to压缩的文件,是不是直接漏到了里边,对不对,它是能够正确的解析的,对吧?OK,那咱现在是不是正好就是这种场景,你来看一下啊,我们现在声明了那个存储格式了吗?没有没有,那就是什么默认是不就是文本文件对不对?OK,那完了之后呢,我们现在能不能直接把一个,诶,就是咱们ods层,呃,把咱们那个o date文件load进来呢?是能的,我们那个文件本身就是文本文件,然后使用GZ压缩,对吧?是可以直接拿过来的,它是能够正确的识别的,这个没有任何问题啊,是这样的啊,但是呢,这个仅限于什么类型的BZ和G,或者是g z to啊,B z to或者是GZ,只有这两种是行的,但是别的压缩格式我能这么干吗?
12:22
别的就不行了啊,是这样的啊,这个一定要注意,比如说举个例子,我们再退一下啊,就说之后你在刚才的这个com data story下是不是还有一个拉罗cooper啊,对吧?OK,那这种压缩格式你就不能这样去玩了,对吧?那这种压缩怎么玩的,你点进去点之后呢,我往下走,这儿实际上是有一个table DeFinition,这就是表的一个定义啊对吧,你得怎么定义,你得按照它的要求去定义,看看这这块怎么建表了啊,他这么建的,说什么可瑞,什么表名儿,然后边是不是加上这个这个各各种字段呀,对吧,这个不多说,咱重点看下边,下面呢,是不是有一个store eyes啊对吧,大家来看一下store怎么写呢?是不是in input for是什么,Out put form是什么呀?对吧?现在大家应该知道input和outut form,它它们俩的作用呢?Input form是干什么用的?是什么时候会用到这个表input form来着?
13:12
是我们是往这张表里写,还是从这表里读的时候会用,从这张表里往外读出去的时候,是不是会用到它这个音input form对吧?我们往这上面去写数据的候,是不是会用到autop form呀,对吧?这个要搞清楚啊,好,那接下来我们继续往下进行,OK,那我们现在input form,你看它指定的是什么,是不是拉泽罗test的input form对不对?那这样一来的话,你想我们从这样的一个表里边去读数据,我是使用的拉泽罗test,那完之后这个表下边存的如果是拉泽罗文件,那我是不是就能够正确的读出来了?对,它的逻辑实际上是这样的话,也就是你看这种压缩格式,你就不能不声明存储格式的,你就得声明一下才行啊,这个一定要注意啊,啊,就是不同的压缩格式,我这个建表语句里边的这个语法是不太一样的,这个按照官网的要求去来就完事儿了,对吧,以后大家要自己去设计这个表结构,你得参考官网才行啊,这个注意一下就行了,好了各位同学,那截止到现在这张表的建表语句咱们总算是都完成了啊,这个。
14:12
该说的基本上都说了,最后一个小细节啊,注意这个表咱们建的是什么表,是外部表,我们have当中,我们数仓里边所有的表都是外部表,对吧?这样是是不是呃能够防止我们呃失误删除这个数据啊对吧?这个注意一下都是外部表啊行,完成之后视频我给他点一下。
我来说两句