00:00
啊,那接下来我们看最后一张日志表了啊,错误日表啊,同样是先分析它的表结构啊,那错误日表当中每行数据对应的,那是不是就应该是一个错误记录啊,啊,这个比较简单啊,那接下来我们再分析一下啊,错误日表当中应当包含哪些字段?啊,我们先看一下错误日表的数据应该来自于哪种日志啊,来,我们回到日志结构那一小节,来看一下两种日志结构对吧?那大家注意观察啊,在这两种结构的日当中,是不是都可能会存在error啊,对吧?来看。没错吧,那因为我们在浏览页面的时候可能会报错,启动应用的时候也可能会报错,对吧?那所以说这两种结构的日志里边都有error。啊,那首先我们能明确的一点就是错误表当中肯定会包含这样的两个error的字段,对吧,一个error code的一个message啊,错误码和错误信息这两个字段肯定有的啊,那还应该包含哪些字段呢?
01:02
来来,我们看一下文档当中是如何说明的啊,来,我们看啊,为了方便定位错误啊,一个错误记录当中除了应该包含我们刚才刚才看到的这两个错误相关的字段,还应该包含哪些呢?还应该包含与错误相关的公共信息、页面信息、曝光信息、动作信息和启动信息。啊,也就是我们前面的日志所记录的内容都应该包含在错误日表当中。啊,那为什么要放这么多的字段呢?我们来分析一下啊,大家说错误日表它的主要意义是啥呀?主要意义是不是就是为了方便我们后续进行分析统计,然后去定位错误啊,对吧。啊,那所以说我是不是得把可能与错误相关的所有的因素都保留下来呀。对不对,那跟错误相关的因素可能有啥呀,比如说可能跟手机的型号有关系,对不对,那可能跟手机的系统有关系,可能跟应用的版本有关系,也可能跟特定的页面,特定的动作是有关系的,对不对,那所以说这些信息都可能与啊咱们的错误是有关系的。
02:11
啊,那所以说为了方便我们定位错误,那所以说我们需要哎,将与错误相关的所有的信息全部保留下来。啊,那最终呢,咱就确定下来了啊,错误的日志表当中的字段呢,应当包含公共信息,页面信息,曝光,动作启动以及这个错误信息。OK,那这就是错误日志表的字段啊,也是它的列啊,那么之后呢,我们再来看一下这张表的分区是如何规划的啊,那分区相对来说就比较简单了,那仍然是按天分区,每天的分区当中存储当天的啊,产生的这个错误日志啊,OK,那现在我们再往下看啊,我们把它的建表语句拿出来,来详细的看一下。来,CTRLC,来大家一起看一下啊,这是错误日表,我先放在这儿啊,来一起看呃,先看上边,那它的表名叫做dwdllo啊,然后再往下走,那我们看一下它的具体的字段啊,那area code这些都是大家比较熟悉的字段了啊,然后往下往下走到这儿,这部分字段是不是来自于啊,Common公共字段呀,对吧?那接着再往下走,呃,那从这儿开始配置到这个位置啊,那这些是不是都是来自啊配置字段没错吧?那再往下走,从ntri开始往下到这个位置,这都来自于啥?是不是都来自于star的启动字段呀,没错吧?那下边actions,这就是动作,Display呢,就是曝光啊,然后再往下走呢?呃,Error code和message呢,指的是错误信息。
03:39
OK,那这就是这张表的具体的字段啊,跟刚才我们分析的是一样的啊好,那接下来我们再来看一下这张表的数据存储啊,那它采用的仍然是帕奎列史存储,加拉泽罗压缩的存储格式,OK,那这就是这张表的建表语句,好,我们紧接着就来分析一下这张表的数据装载啊,我们打开文档啊,那先来看一下它的装载逻辑啊,就这么简单啊,它的逻辑呢,实际上跟启动日表和页面日表的逻辑是相同的啊那具体怎么做呢?啊,具体的做法就是先将包含字段的日志从ods表当中过滤出来啊,那其实我们过滤出来的这些日志啊,每条日志就正好对应于啊错误日表当中的一行数据。
04:24
啊,那所以说这呢,也不需要去进行一进多出的操作了啊,这个比较简单,那所以说接下来我们就以直接使用get object函数啊,去逐个的解析每个字段,那这张表的装载逻辑呢,就是这样的啊OK,那接下来我们看一下它最终的这个装载语句啊,因为比较简单,我们就不再手写了啊,把它拿过来。来,CTRLC放到当中。好,大家一起来看一下这个装载语句啊,那首先我们先看它从哪读取的数据,那是不是o DS log对吧?说DT等于六月14下边呢,Get杰森,Object land error is not no,没错吧?那剩下的事儿呢,就是呃,按照我们的要求,一个字段一个字段的去进行get就可以了啊,这就是这张表的装载语句。
05:11
好,那咱这还有一个小细节大家要注意一下啊,大家来看这儿,大家观察这是在干什么呀?这是在获取action和display相关的信息,也就是动作和曝光相关的信息,对吧?你看他是怎么获取的啊,他是不是直接从烂字段,也就是从一条日志当中直接获取actions和display这个字段后边的值啊,对吧?那这两个字段后面的值大家都知道它应该是一个啥,是不是一个杰森数组?没错吧,那咱拿到的是不是就是接的数度,那最终保存到这张表当中的数据就是什么样的了呀?那首先一行数据是不是一个error,没错吧?那后边与之相关的动作都保存在什么里边?是不是保存一个数组里边啊,对吧?啊,那这个数组当中呢,可能有多个动作,那同样道理,那一行数一个error,那后边与之相关的display是不是也都保存在一个数组里边了?
06:00
没错吧,那也就是现在啊,我们的动作哎,以及曝光和error的对应信息应该什么样?应该是一个对多个的信息,对吧?一个error啊,对多个动作,一个error对应多个曝光,没错吧?哎,这是咱们数据的现状啊,大家想一想,假如说我现在需要去分析error和action之间的关系,也是错误跟动作之间的关系,那你说这么存储数据,咱能分析吗?那显然是没有办法分析的,要想分析就得怎么办,要想分析我们就得来一个转化,对吧,什么转化一进多出,那咱们具体怎么操作呢?啊,其实我们应该将数据转换成这种形式啊,就是一个错误对应一个动作啊,一个错误对应一个动作,一个错误对应一个动作,那这样一来的话呢,才方便我们去分析,哎,动作和错误之间的关系。啊,那我们怎样能够把数据转化成这种形式呢?啊,其实很简单,在这儿呢,我们是不是直接使用之前咱自己定义的那个UDTF函数就可以了,对吧?咱那个UDTF函数能干啥,是不是就能够将一个杰森数组字符串来给它进行一进多出的操作,那最终我们总结一下啊,来大家来看,如果需要分析错误与单个动作或者是曝光之间的关联关系,那我们就得先使用explore的阶次瑞啊,将动作数组或者是曝光数组炸开。
07:17
啊,那炸开之后呢,我们就能得到啊,一个动作对应一个错误,或者是一个动作对应一个曝光的这样的数据了,那得到之后呢,我们再进行相应的分组统计就可以了啊。
我来说两句