00:00
接下来呢,就到我们核心代码的写了,写核心代码的对吧,还是在这个DWS层,哎,终于到我们的DWS层了啊,这个类名呢,我去拿一下代码,嗯。Keyword这个的实体类,这个keyword病实体类,到时候我们再说啊呃,常量最后再聊啊。可号是依赖,嗯,依赖的话我还是倒一下吧,依赖还是倒一下。依赖不倒,那省得到时候写的时候就有问题,这个呢,是克里浩斯的一个依赖。OK吧,把这个依赖倒一下,因为其他东西呢,肯定不会漏啊,万一依赖漏了,然后将来呢,在我们的J末con这个常量当中补充克house的相关参数,OK吧,好把这个拿过来啊。拿过来好,以后呢,在我们的常量里边把这两个东西补一下啊,未来呢,我们肯定要用一个是克驱动,一个呢URURL呢,这个我就不叫rebud了,我直接叫211126,还是用咱们班级号对吧?这是库名哈,库名每个班一个库啊,在克列号里边每个班的一个库对吧?你就跟我们MYSO的库一样的,我诶那菲尼也一样的对吧?库名呢,咱们得做一个区分啊,咱们得做一个区分,OK吧,好,那克house呢,我们把这个准备一下啊,那现在呢,当然用不上,现在用不上对吧。
01:16
好,那接下来呢,把我们核心啊,这个工具类到时候再说啊,这个工具类还其实挺复杂的,好那我们直接先把这个拿过来。DWS里边来把这主类拿过来对吧。我告诉你,今天就没办法写的克雷浩斯,因为克雷奥那个工具类呢,嗯,比较复杂啊,这里边最难的一个地方呢,就在于那个克雷号的一个工具类啊。PSM啊,那这个是属于我们d ws traffic流量域对吧,Keyword这是我们的。这是我们的力度,对吧,Page view页面的访问。业务业务啊,然后window这是统计周期对吧?啊,没有那个业务限定啊,这是我们的这个统计的一个。
02:03
实施的流程,实施过程对吧?好,那在这里面呢,我们第一步还是获取这些环境啊。第二。使用。DDL方式就斯嘛,对吧,DDL方式读取。卡夫卡,这个什么叫配置log?当然具体的不叫这个名字叫DWD什么什么配置log对吧?好,那我们读取配置log主题的数据创建表。并且。提取时间戳生成what mark,这个很重要,这是我们的第一个重要的点在这啊,要算着这个wordmark啊,好,那接下来第二个。
03:00
第三点,那我们说要过滤对吧,过滤出。搜索数据。过滤好之后。注册。UDTF。And。切死。切词对吧,你注册函数去切词好,那么第五步分组开窗聚合。好,那我们呢,将。动态表转换为流。最后。将数据写出到。
04:06
抓捕启动任务。对吧,好,这是咱们整个的流程,其实跟。PPT里边播出来一样,只是一头一尾没有。对吧,呃,获取执行环境跟启动任务没写其他的呢,就是正常的一个步骤。啊,那UGTF函数呢,我们已经写好了,等我直接用对吧?好,这里面几个难点啊,在于第一个生成时间戳,第二个用这个UGTF,第三个开窗,因为弗link搜里面开窗我们很少用,对吧?啊嗯,已经用过很久了啊好,那第一个获取执行环境,这个呢,我们就还是正常的去拿一下吧。随便找个DD。
05:02
这个咱们这样写啊。好,那这个就搞定了呗,对吧,搞定了好,那接下来呢,我们要使用这个天烟去读取这个数据的啊。这里边呢。要去建表啊,然后首先呢,我们得找到我们的页面日志,然后呢去建表对吧?好页面日志这儿就有一个页面日志,当然我们找一个简单的,比如说他因为这个呢更好看一点,因为未来我们页面日志当中呢,像这个呃,Display啊会被干掉,大家还记得吧,最早我们DWD的第一个需求。还记得吗?DWD的第一个需求。未经加工的。日志数据对吧,把五个数据呢,给它拆开。
06:00
是不是拆开的时候呢,我们对于页面日志,我把display还有action是不是都删掉了呀,并不需要这些数据,把error呢也可以干掉,对吧,这些东西呢,没有用啊,所以呢,我们直接看它,哎这块呢,我们应该有这个格式吧。往上翻,呃,啊,这个保留它是一个启动是吧,这保留的是一个启动,嗯,那你把这个当做配置来看,其实也可以哈,或者说呢,我们还是用刚才那个。这个配置啊,就用它吧,它啊呃,然后咱们也准备一个这个来。他这个看着怎么这么怪呀。这个不好换一个。这个也不好看,还有一个那个呢。
07:02
他这个东西我怎么感觉都很不爽呢,哎,他怎么粘贴这个东西。把这个拿过来对吧,放在这个位置吧,放在这下面啊好,那这就是我们要的一个数据格式,对吧,我们只拿格式,那要建表呢,我们讲一下啊,这里边呢,嗯,Common如果要的话,这个字段用什么类型。假如说他我需要,那我要用什么类型啊,假如说这里边字段我都需要。那这个介绍语句也好写吧,对吧,它的格式长这样子啊。假如说这里边你都需要你怎么写啊这个界面语句。
08:01
这其实你就算都需要的话,其实也比较简单,对不对。好,那我们写create。Table。啊叫配置。Log。对吧,第一。啊。咱们呢?用什么类型,是不是用麦。对吧,好,那这个呢,我们写过。啊,假如说你要你你都保留吧,对吧,第二个配。那配置呢,当然也是它。啊,第三个TS。TS呢,咱们用big in就行了,对吧。好,呃,还没结束。
09:00
啊,还没结束。对吧,光大不行,因为我们说了,你不光要建表,你还得干什么事。你得提取时间戳,生成word。那就说这个TS直接到摩托行不行不行。那肯定不行啊,Worldmark是worldma,它是要利用这个TS去生成worldmark。对吧,而不是说你直接拿着这个东西当做我的骂,那肯定不行啊,对吧,而且其实这里面啊,这玩意儿可以不要,你想一下跟common资坦没什么关系吧,我们是不是对这里边到时候呢,如果这个item tab它等于keyword,那么这个item呢,是一个苹果手机,我们要对这个内容进行切分,其实要有一个配置就够了,对吧,跟他呢,都没什么关系,你想想看是不是。对吧,它跟common其实没什么关系啊,你都可以干掉啊,这个东西不要了吧,直接不要啊好,那接下来呢,我们就想一想这个东西啊,这个东西呢不太好。啊,不太好写,你要通过TS转化为这个悬戳,那以前我们用的PTPT比较简单对吧,PD呢,它是处理时间,那直接as pro time调这个函数。
10:10
你这样写就行了。对吧,但是呢,我们现在是实践时间,你得通过TS来构造对吧,而且呢,我们还得想一想这个玩意儿应该怎么写啊,所以呢,我们得找到这边的一个。文档。啊,得找这个文档来解决这个问题,OK吧。呃,那在哪呢?首先我们得找到它这个什么,在这儿时间提取。对吧,这个呢,我们放在旁边啊,啊得找到这个时间的一个提取。因为之前我们在DW层用过。用的是这个。处理时间大家记得。点开啊,点开好以后呢,看啊,我们之前是不是定义过这个处理时间,诶有这个DDL有这个转换。
11:00
对吧,啊,那转换呢,跟D点我们都用过啊,转换我们是不是自己写测试我用的这种方式。用转换对吧,点pro time a d dl呢,咱们也用过。啊,DDR咱们也用过。对吧,定义在这个D点当中啊。咱们也是用过的。对吧,直接写一个pds这个在哪,在topic DB这张表里边,咱们一直用的是这个,对吧,因为要用处理时间跟。Lookup表进行关联,他要用到这个处理时间啊呃,那下来呢,还有一个这个疑问,他们在这上面对吧,诶这个时间时间呢,我们这块没聊,呃,这也有个流到表的,表到流的一个转换,对吧?流到表的一个转换,那这个简单一点,但是呢,我们现在DDL直接进表,那怎么写呢?看这个。对吧,来看它呢,是这样写的,叫use action time,当然这就这个字段,就跟我们写那个PT写pro time是一个道理,都行,对吧?好,那这边呢,呃,What are for use action time,然后as use time减in the5秒。
12:05
对吧,诶这是延迟,好,那不管怎么样呢,我先把它先拿过来啊拿过来。往那一放啊,这中间的猪式,那我们就不要。对吧,这个呢,我也不要用什么user time不需要,这太复杂了,对吧,我叫RT。这个呢叫RT。按照我们之前的,我们的延迟呢,都是两秒对吧,那我们也给两秒啊,或者你给五秒也行啊,延迟呢,也不要那么高吧,对吧。好,那这样肯定不行,为什么你这个RT呢,你给一个这个什么。STEP3,那就行了吗?那铁不行啊,凭什么你这个RT是个什么东西啊?谁认识你告诉我。谁也不认识对吧,我们是不是想着得通过这个TS创建出来这个RT才可以。
13:00
对吧,而且呢,他官方文档告诉我们的得是一个。类型的才可以吧。啊,那接下来如果是你,你做到这块,你接下来应该干什么了,准备。就是你在官方文档当中找到了人家的RT,需要这样去定义,对吧,那么这一块你接下来准备做什么事,你告诉我。你准备干嘛?这块我说了,你也得通过这个TS。去生成一个这个RT,而不直接写一个RT,直接写个RT不行。对吧,它你得肯定根据这个TS来生成才可以。
14:06
你如果做到这一步,你接下来准备干嘛了?你告诉我,然后看大家有没有什么想法。对吧,我要根据这个TS去生成这个RT。Page log中添加一个由TS转换的RT。对呀,现在不就聊这个事儿吗,就怎么转换呢。对吧,你应该干嘛了,是就是这个RT肯定不能这样写吧,我们得用TS去转换,我现在问的就是转换呢,那我也不会写,接下来我应该干嘛呢。对吧,这就是面对这种问题,你有没有自己的想法。确实现在我要用TS去转换。查flink的时间函数,对了啊,其实我想要的就是这个答案啊,那你如果说自己做到这一步的时候,你接下来应该想到应该我们要去查flink的时间函数。
15:08
因为我要直接问大家,我说哪个函数把这个TS是一个int类型的,对吧,把它转成。Time类型的问大家,大家肯定不知道呀。对吧,所以你应该想到接下来呢,我们应该去查flink里边时间函数有没有将。Long类型或者big in的类型,对吧,转换成time类型的。函数如果有的话,你直接拿过来用。对吧。啊,是这个意思能理解吧,好,那接下来呢,我们就找一下这个函数啊,呃,在这边。还是切到这个方程,那这个找系统函,如果不行,我们还只能自定义了,还比较麻烦对吧?啊这种类型还不太好写啊,时间类的在这啊,时间类的函数这个。对吧,那这里边要用谁呢?首先我们找这种函数,你是有目标的,因为你要找到函数,比如说是AA啊。
16:01
比如说是A,然后呢,A要传个TS,我们的目标肯定是这样对吧,那这个TS呢,是一个B跟的类型。是一个数值型,而AA的这个函数它参数。是一个竖直型对吧,且它的。返回值得是一个time sta是不是应该满足这两个条件啊?也没问题对吧,你找函数不是盲目的找,首先你那个函数没有参数的,你就不用看了。肯定不是你要的,你你肯定要有一个函数,有一个参数,我们用于传TS。且。是beginning的类型的,对吧,那接下来返回值呢,得是time stamp类型的啊好,那我们就找一下啊呃,那我可以告诉你,这里面没有这个函数。啊,你你你把每个函数都看了都没有,所以呢,我们要找两个函数来拼啊,用两个函数来拼啊,这里边用谁呢?首先这里边有一个。
17:03
这个。这里面有一个什么呢。他。叫。对吧,叫那我看一下啊这个东西。还有这个to time,感觉这个更像对吧,因为你看啊这些没有参数,To data感觉不太是啊,那这个什么叫UN time sta感觉是哎这个呢叫to time,感觉好像更像了,那我们就着着重看这两参数啊,那接下看谁呢?看后面这个呗,对吧,好看它啊这个参数。A convert转换data time stream,诶转换一个日期时间函数啊,日期时间函数是什么呢?THREE1对吧,转换这个1FORMAT。孙二啊,注意啊,这后面有个说骂的啊。他不是到这就结束了对吧,就看着很奇怪,这个东西啊,他他他没展示完啊在这对吧,他说呢,把这个四论一四对一呢。
18:03
要转换这个四乘一啊,然后呢,这个是什么。Format in format spring,二也就是二呢,是一个格式对吧,转这个年月日十分秒的一个。格式对吧,呃,To。In,完了。它呢,转化成什么,转化成秒确实跟我们想的也没问题,是用来转化为时间戳的,对吧,但是呢,它是将这个年月十分秒呢转化为谁啊,转为秒不行,那我们要的是什么。Time step类型,那肯定不要转化为秒吧,对吧,那看下面这个,这个呢,To time step,诶那这个呢,看啊它叫convert data time,诶跟这个上面都一样啊,然后呢。To a。看见没,他是做这个的,好,但是有一个问题啊,我们现在这个TS是个什么。
19:02
我们这个TS它是一个的,但是呢,我们找到的一个函数,我先给它拿过来,第二个参数中二啊可以可省对吧,省略的呢,是年月十分秒默认格式对吧,把它拿过来。嗯,那函数呢,找到了,它可以满足我们的返回值是time step没有问题,但是你传TS不行,它得传一个什么叫年月日十分秒的字符串。所以我刚才提到了,它没有一个函数直接从到time step,那我们怎么办?曲线就国对吧?我们先找到一个two time step,接下来如果我能找到一个函数。把big int转化为年月日十分秒字符串,咱们这个事情是不是也就可以搞定了?对吧,那有没有呢?有啊这个函数在这。嗯。给大家找一下在A这个函数,在我看一下啊。
20:02
上面都不是啊,嗯。Data format。它是将一个。时间戳转化为。一个字符串对吧,这个是反过来的啊,这是反过来的,把把时间转化为字符串啊呃,那我们要from unit time啊,来看一下它啊。From from从这个转换,而且呢,它前面传一个number,一个数字对吧,好来看啊,他是干什么事呢,他说。转换一个我们那个数字的值对吧。数字参数的一个值对吧,In string。诶把我们那个数据呢,转换成这种格式。第二个参数看。默认格式就是它。啊,默认格式就是它。对吧,那也就是说这个函数好像就是我们要的。对吧,就是我们要的它能够将一个数值类型转化为年月日十分秒,默认格式就是年月十分秒,好那么再来看这个数值型啊,这个数值型呢,人家说了这个数字呢,是一个什么。
21:12
内部的时间戳值对吧,是什么呢?是second。是一个秒数。注意他要的是一个秒数,但是现在我们TS是一个什么,是一个毫秒对吧,所以呢,这块我们还不能简单的这样做得怎么做呢?来注意看啊,它呢也有一个默认值,默认值呢是年十分秒对吧,把它拿过来。往那一放。括号。T。除以1000。这就好了。对吧,所以呢,我们用两个函数结合了一下,首先它。是负责将。我们的毫秒数转化为年、月、日。十分秒的字符串。接下来由这个to time step这个函数将年月日十分秒的字符串转化为time step类型。
22:09
啊,转化为他们类型,那是因为在福林港当中,它并没有提供一个。In到time step的一个函数,如果有的话,我们就肯定直接用了,没有,所以呢,用了一个函数嵌套了一下,OK吧,这是我们提取时间,说麻烦吗?对吧,比我们的。Data加对,要麻烦很多啊,这要要注意一下啊,但是没办法只能那样去写啊,好,那把这个拿过来。往这一放,接下来还没结束。主题。下面。主题呢,我拿一下好吧。就不仔细写了啊加这个。对吧,是DWD层traffic流量域配置。
23:02
或者说直接拿他吧。还这两个。先到这这我加一个。首先第一个位置这儿传一个topic这。好,CTRLR把这个杠N呢替换成空格,那我们第一个表搞定。啊,终于把这个表搞定了,对吧,其实里面最复杂的呢,就是这个,就这个关于RT的提取。对吧。好,那接下来呢,第二过滤这个呢,就比较简单了啊,因为我们直接来看我们的数据,对吧,CTRL加F还是搜这个search,诶这边呢,又有一个它啊嗯,你看这个数据啊,首先呢,我们这样上一跳页面呢,得是search,这是一个条件,第二个它的item time呢得是keyword。这是第二个,这两个条件呢,满足就证明我们是一个搜索数据,第三个那我们它呢,不等于那。
24:06
啊,假如说万一脏数据,它等于那这个数据呢,我也不要。因为你切死也切不了,你最后呢,是一个浪值,那没有什么意义。对吧,意义不大啊,这个意思在这啊,所以呢,三个条件吧,第1KEYWORD last pd search,第三,它不等于呢,三个两点同时满足,就是我们的搜索数据可以吧,好,那这个呢,就好写了,来,我把这个拿过来啊。拿到。这个位置。啊,拿到这个位置它呢,都在哪啊,都在配置里边,对吧,这三个字段都在这个配置里边啊好,那select。我们要什么,我们要的字段是不是就是它呀,就是它对吧?好,那配置中括号还记得从这里边怎么提取数据吧,对吧。呃,获得这个item。
25:01
Item好,那这个呢,咱们就叫。哎,等得了对吧,接下来RT保留RT,因为未来呢,开窗得要用它。开窗要用的这个字段就保留这两个就够了,其他的一个就不要了,对吧,你其他没有用的,你这个什么TS没有用啊好。From。咱们这张表呢,叫page。然后我。对不对,Will啊,三个条件,第一配置。咱们的last page ID少了一个单引号啊,Last page ID。得是谁啊,Search?得是测试。And。他的item type得是keyword。同时满足什么它。意思。
26:02
Not。那OK吧,这个过滤其实还是比较简单的一个过滤,对吧,你只要搞清楚诶,我们要的这个搜索数据,它是什么样子就就好了,对吧?好,那这个过滤呢,咱们就搞定啊,这一步呢,轻轻松松对吧,拿下啊。因为点circle query。往那一放对吧,CTRLR把这个杠N呢。做一个替换啊,这样的话呢,我们就得到了一个filter。好,那创建一下点。Create temper。对吧,嗯,那这边呢,是一个。Table。啊,对这个table进行一个创建啊,当然你中间也可以做一些打印,做一个测试。OK吧,当然呢,我们就不测了啊,这个S呢也还好,也不难,对吧,这个就比较简单,只要你第一个能过,第二个这个肯定能过。
27:02
对吧,诶,我这个肯定会不会给我带来打脸了啊,我说肯定过,然后呢,不知道哪个地方,然后就写错了对吧?啊,少了一点东西啊或者什么样子的啊,那如果有问题咱们再改呗,对吧?啊呃,唯一的有问题地方呢,可能就是刚才杠N去掉变成空格啊,如果没有变成空格就有问题。对吧,你你比如说你没有变成空格,你这个and跟前面就挨起来了。就粘在一块了,对吧,啊,它就可能有问题啊,但是一般呢,我们都会变成空格啊,如果说你不放心你在这儿。你都加一个空格,这样呢就不容易出问题了,对吧,前后都有空格。那就不会有问题了,OK,这是我们的过滤这一步呢,So easy,对吧?好,那接下来呢,要注册UDTF函数,完成我们的切词。啊,那这涉及到我们刚才自定义函数的一个使用,对吧,那还是一样的,咱们翻看一下刚才的文档在这对吧,这个呢,我们按照它定义的,定义之后呢,那接下来看。
28:07
怎么用对吧,这上面呢,这很明显是TABLE1篇了,TABLE1篇咱就不看了,对吧,我们直接看so在这啊SO1篇啊呃,那首先呢,Called调用这个注册后的函数in s对吧,那我们得先去注册啊,找一个注册在这对吧,把它拿过来啊。直接拿回来,你不要注册嘛,对吧,咱们这个呢,不是因为啊是table因为。SP的方式,然后呢,导一下这个包。导下依赖对吧,我们的函数呢,就叫speed function啊,就叫这个名字,接下来就使用,使用的话咱们得看一看模仿来写啊,你不能直接粘过来了,因为你不太一样了对吧?呃,拿这个内容对吧,上面拿第一个就行了啊so query,然后呢,查这个数据,我们先拿过来啊,然后呢,再咱们再来分析它到底是怎么写的,根据我们这个表名应该怎么改,对吧?咱们这个表明呢叫什么这张表。
29:03
叫felt。下划线table对吧?好,我把这个无关紧要的东西给他干掉哈。给他干掉,然后呢,这样。为了好看一点。Table letter table,诶,大家letter table想起来了,Let view。对吧,想到了let view啊,在have里边咱们X pro对吧,是不是可以加这个let view侧写表对吧,作为一个炸裂啊,作为一个炸裂啊好,那么来看一下,看一下这个东西模仿他,我们咱们咱们应该怎么写,对吧,首先呢。叫my field,诶这边my field。啊,首先select什么字段对吧,From my table啊,那这个table呢,毋庸置疑。肯定改成fair table对吧,然后呢,Letter table split方没毛病。啊,那这里面my field给一个字段,这个肯定是要炸裂的字段嘛,对于我们来说应该是谁啊,应该是这个item,咱们要对item进行加列对吧,所以呢,呃,这个item那它写在这儿了,那我们也先写上对吧?叫叫这个item先写上,等会要不要呢再说,那这两个字段怎么来的。
30:21
这个叫my table,这个地方对吧?这个叫my field,它指的是你要炸裂的这张表。以及要炸裂的这个字段。没毛病吧,啊,但是呢,这两个字段是什么?大家能不能告诉我这个word跟length是什么?啊。这个word跟应该怎么理解。
31:16
啊,陈总说炸裂后生成的字段没毛病,大家还记得官网上人家炸裂出来几个字段,一个word,一个LES2个吧,所以呢,人家这边你看啊,它就叫word跟less。就我们刚说了,它就是它这个默认列名对吧,你可以取别名,取别名怎么取呢,在这啊看。叫ast,这是一个表明对吧,然后呢,Neworld new n,哎,这是取别名的方式啊,但是我们呢,不需要取别名对吧,就用这个,那咱们的字段呢,只有一个吧,Word这个就标了。对吧,最后这个就标了好,那我们还没到开窗RT呢,得保留对吧,RT得保留好,那这个字段你想一下还有没有必要啊。对于咱们来说,就。
32:01
不需要了吧。是不是咱们那个item原来表的字段就不需要了,我们只需要炸裂之后的这个字段是不是就够了?对吧,所以呢,咱们写出来这个色语句就长这样。就长这样,就模仿着人家来写的,对吧,长这个样子好来。啊里table也没点circle query。往这一放对吧,CTRL加R把杠替换成空格啊,只要替换成空格就没有问题,那这样的话呢,我们就得到了一个叫spli。Table切分后的一张表对吧,同时我们对这张表呢,再进行一个。创建对吧。Table。嗯。哎,啊,怎么这点了啊,我们说这个变量怎么出不来啊。
33:05
好,那这块呢,咱们的分词任务也已经。搞定了。啊,咱们的分词的任务也已经搞定了,OK吧。
我来说两句