00:00
好,上午的话,我们把这个自定义udf和自定义UDTF。以及创建这个这个永久函数啊,已经都讲完了,对吧,已经把这一步创建完了,创建完之后呢,下边我们就要用这两个函数。对吧,用这两个函数进行去解析。事件。首先把我们这个目标日志准备好。打开。对吧,我们要向这个base log里面去添加数据,那添加数据的话,我们这里面已经准备好了两个日志。啊,两个这个函数啊,已经创建好了一个它。还有一个他。这么两个也是自定义函数,我们是有的,好,那我们一会儿就要用到两个函数啊,先往这放着备用。
01:00
行,首先呢,我们要往这里面插入数据,那插入数据那就正常写呗。来,Ert insert o water table。向这张表里面插入数据,那由于这张表呢,它是一个分区表啊,一定要看好啊,插入的时候它既然是分区表,那这块就要写上partan,然后零的DT,我们是2020年杠零三杠幺零对吧,哎,0310,然后select。S啊s from from哪张表呢?我们来源于的表呢,是这个DW啊ods啊ods。到这张表,然后条件。啊,外置条件,DT等于2020年,杠零三杠幺零。
02:01
啊,那张表,那这张表的话,往这里面添加对应的这个数据。对吧,哎,那你先看一下这个张表长啥样啊。把这个数据也拿回来。对吧,哎,在这呢,呃,这张表里面只有一个字段,就一个line对吧,哎,就一个烂,那简单的拿过来。这给它删掉,嗯,没有,也就说这个ods even log这里面只有一个,知道你说这里面只有一个了。那对它怎么解析呢?哎,你要把它看一下啊。过来。嗯,DWD这块啊,你解析的是它,那把它进行一个炸开,那怎么炸开呢。LA啊,对它进行一个炸开,那对它炸开怎么炸啊,用去炸呢。
03:03
用它对吧,哎,你传进来一行,我把它给炸开,那我就用它啊,用它去炸,那你传进来一行,那这一行内容怎么获取呢。传进来是谁?还记得?不传进来的是那个杰森宿主?啊,那个健身叔叔。把这个查询出一条吧,Select from o。查出一条让大家看一下对吧,这是那一行内容,也就是说那个line,那个line呢,我们一般会给它放到这里面。算了,那我拿这个吧,那我就拿这个就行了,拿这个内容ctrl a ctrl c。F3,哎,这样呢,就把这个数据啊,就给截取出来了哈,现在我们来看一下。比如说这个呢,是那一行line。
04:00
你好,来,比如说这里面存的是它,存的是它呢,现在呢,这个Fla map我要炸开,我要炸开的得是下面这个ET,比如说这里面的数组,那这个数组怎么获取,那不用它获取吗?用这个base and lier,用它呀,它这里面传进去谁呢?传进去这个lie。这个lie不就是这里的值吗?啊,这也值,然后再传进一个参数,一个参数是K,这个K呢,诶。是不是就是个ET啊啊,回忆一下啊,是不是就是个ET,那这个你传进去ET取出来的就是这里面的值,那这里面正好是这个数组,数组作为它的一个参数,就可以把它炸开成两个啊,也说两个值嘛,一个是name。啊,一个呢,是even的类型,也是杰森啊杰森。啊,这么两个值哈,好,那这么两个值就往上一放,还放。嗯,之后后面呢,是这个temp吧,这是啊,这个语法呢,是后面你这个炸开之后temp啊,写一个零函数就行了啊随便写个名字,然后之后呢是as as2个字段。
05:13
拿过来,哎呀,这个折断一下。啊,Tap tap之后,然后at,看at这个你写什么名字都行啊,这里面写的是什么flat啊,起个其他名都行,给个别名就行,然后艾特这个是event name。这个跟你自定义那个函数那个名字啊保持一致,Even even解释自定义udf的时候,UDTF的时候,你看我们那个返回值。是吧,这里面这位和杰森啊,往这一。回来这是这一块,也就是说稍微缩放一下,从这个OS even log里面对它进行一个炸裂,炸裂的谁呢?炸裂是它里面的数组,那数组怎么取,通过它去取,呃,取出来进行一个啊炸裂,OK,那这个炸裂完之后,那我就有了这两个值,那这两个值未来呢,就可以添加到这里面。
06:14
添加到这个位置呢,添加到这个位置。看这个位置哈,比如说name,然后呢,你后面再添加一个呢,还可以添加它。啊,听下它那像这个下面这个呢,Event还有一个several time time怎么取它去取啊。被三的来,它呢,它是可以取出这里面任意的值的,比如说你想取它的话,那你只需要传进来来传进去对应的key,服务器的时间的K不就是it吗?啊,理一下这个思路。对吧,啊it那当然了,你后面这个可以跟上对应的别名哈,呃,然后你再往上上面这个,比如说取一个,它取个公共,那怎么取把被三的传进来。
07:01
然后这一块放大一想啊,你传进去line后面跟上对应的key line,呃,这个line m mid的key是谁呀?是这个mid啊mid,那正常情况下你后面要起别名的啊,这面没写啊,你可以写上别名,包括下面这些啊,都可以起别名的。哎,就是这么一个套路哈,你看。这样的一个思路,你取谁都能取出来,那你捋一下,就是你从你想往这个里面插入数据,那插入数据的话,你来源于它,那它这里面能给你提供什么呢?哎,首先这一行炸裂的话,给你提供的是相应的这个事件里面。啊,返每一个时间里面返回的值even name会把这两个值填上,然后呢,同时这块呢,这个这个东西呢,用谁呢,用这个base and它去把它获取到。啊会的,然后上面这块呢,公共字段,公共字段呢,就是被被三单的水者啊,你传进去K。那就取出对应的值。
08:01
啊,就是这样的一个逻辑哈,行,那这个完事之后呢,我们来试一下哈。我这个中间这块太多了,我就不写了。不写了,拿过来。把这块信息拿过来,哎,往这一补,那后面应该还有一个several time,把它补上。啊,对吧,哎,这样啊,我那个代码里面这块又加了一个,就是更安全的一个校验啊,加上一个什么呢?嗯,And。按了一个他。你说这个值。Base这个A,它取这个ET的时候,它不等于空,是不等于空吧,我记得是应该是我加了一个它不等于空,因为这个还是跟咱们照那个呃假数据有关系啊呃,如果说呢,我们后边那个。它这里面就是那个十个吧,十个布尔变量,同时如果都为空的话,那这个一题里面是没有值的啊,就是防止这种情况发生呢,我们加上一个。
09:08
啊,那个空我不给他转成它了嘛,对吧,转让它啊这块呢,是额外加这么一句,如果你在正常正常情况下生产环境下,这个数据不会有这个问题,所以说啊,这是额外更安全一些,那行,那这里面怎么办呢?我先不往里面插,我先查一下看能不能OK哈,先查询一下。啊。报错了啊,OS even log LA 22杠零看一下。22杠零应该是这一行啊,因为前面有两行哈,前两行没没插啊这啊啊这啊这个哈,因为这个呢,是这个后面这个最后一个它没有对吧?OK,那我们来一下先,那最后就直接往里插入了啊,直接插入看看这回行不行。来,嗯,应该问题不大啊,来眼睛还挺尖啊,最后一行逗号,行,那这个我们就给他脱掉了啊,这个脱掉了干掉。
10:09
如果插入成功的话,那我们就要这个查一下啊,查一下这里面的值对不对,那就是select啊这张表,然后where dt啊查写一下提前语句准备好。性能多少?37。可以了是吧,啊,疫情结束了,再查一下,我确定一下这里面的数据已经有了啊往下走。哎,目前能看到这个数据,那就说明我这个解析是正确的。行,那你说这个代码呢,就OK了啊,希望大家呢,把这个呃自定udf,还有这个自定义udtf啊,这两个函数如何使用的,它这个逻辑呢要理清楚,那这样呢就可以了。
我来说两句