00:01
呃,上午呢,咱们其实呢,主要是把这两个功能给做了一下啊,把这两个功能做了一下,然后呢,说我现在啊,想去统计我们的首单的一些我们的情况,那可能呢,会按照不同的我们的维度指标来进行我们的分析,对吧?那比如说我现在想按照省份,想按照用户的年龄段,想按照性别来进行统计的话,那么这个时候我现在这个性别呀,年龄啊,省份的名称啊,这些东西本身在我们的订单表里边,它是没有的,对吧?那需要用我的订单和我们这个省份表以及用户表来进行关联,对吧?那如果想要和省份表和用表进行关联的话,那么这个时候呢,那就得先想办法把咱们省份和用表啊给它拿到,对吧?因为这个省份表和用表,它和我订单表不一样,这个订单呢,是我们这个实时业务数据对实时产生的数据,但是我的用户呢,还有我们现在这个省份对吧,它其实呢啊,这个基本上在我业务数据发生之前,他就已经。
01:01
存在的对吧,所以说呢,一个是事实表,一个是维度表对吧?那么我们现在维度表放在哪呢?那么第一种情况放在我们这个MY搜Q里边啊,直接从my soq进行查询,这种情况呢,那肯定咱把它pass掉了,直接操作MY搜QL啊,这个效率太低了。那第二种情况呢,注意我们说把它放在我们这卡卡里边,大家注意啊,如果说你要把它放在卡夫卡里边呢,说明你对咱们的卡夫卡呀,其实理解还不是特别透啊,因为什么?因为我们当初在讲我们这个大数据框架介绍的时候,你们应该在海度这块会给你们介绍说你们可能对吧,会接收哪些东西对吧,有什么?呃,这个存储层有什么,咱们这个传输层对吧,还有什么,咱们再往上等什么计算层等等,对吧,那我现在我这个卡夫卡它本身位于哪呢?它其实位于我的传输和存储啊,这个直接就是我现在卡卡有一部分存储的功能,那有部分的传输的功能,对吧,那你能不能用的一直存储数据呢?其实这个做。
02:01
做不到对,因为咱们现在这里的数据是不是只会保存七天呀,对吧,所以说你不能没把这个数据呢,一直放在我这卡卡里边,对吧,这个呢是不太现实的啊,这是不太现实的,那如果说我现在这里也不能放短,然后呢,卡卡里也不能放,那往哪放呢?说那往ready放,对那ready放的话呢,大家想一想,这个东西呢,本身它要长期的保存在我们这个red中,那对内存的压力呢,那也是比较大的,对吧,所以说呢,后来我们想一想,还是放在我们的h base里面去,对吧?那么如果要放在h base里面的话,那这里呢,其实有两个问题要解决,第一个就是我们现在历史数据的初始化,那么第二个我要实时的去监测我们现在这个数据可能发生的变化,那么如果要历史数据初始化的话呢,那么咱们在使用我们这个工具的时候,Maxwell它可以帮助我们来做一点啊,做到这一点,那么第二点呢,我们现在要保证呃,可以实时监控到它的变化的话,那么这个时候我们呀,也要去写两个我们SPA stream程序。
03:01
然后让他呢,去从我们这个对应的主题中来实时的获取数据,如果一旦有变化了拉,我们可以把这数据采集到我们这个主题中,然后呢,我们进行分流,分到不同的我主题中这两个次方就位呢来对它进行处理。啊,这两个Spark streaming来对进行处理,那有的时候老大你现在我能不能够把这这两个这个SPA streaming放到一个里边啊,对吧,其实这也可以,对,就是我现在假如说我一个写一个我们这个APP,对吧,然后呢,去兼控所有的这个指标,这样行不行,行对,那就看你们怎么设计的嘛,对就看你怎么设计,对这就相当于我们现在啊在这个。我们开发的时候,对吧,在开发的时候,那我现在把我所有的功能我都封装在一个类中,行不行,那肯定也可以啊,对吧,但是呢,一般咱们不这么干对吧?咱们呢,可能诶,我这个是做过什么什么业务的都把它分一下,这个做什么业务的把它分一下,对吧,一般的我都是对吧,这个分的清晰一点啊分的清晰一点,呃,然后具体呢,咱们现在呢,在实现的时候呢,那么这块的代码呀,对吧,那么怎么实现的,其实这种还是比较简单的,对吧,上回咱的代码呢,其实主要做这么些事儿,首先第一个在我们的H里边,对吧,其实是通过菲利克斯啊来创建我们现在这两张表,然后接下来在我这里提供对应的样例类,这个样例类它里的字段呢。
04:24
其实和我们A表示段的其实对应的,然后接下来那我再去读取我们这个数据的时候呀,对吧,那首先我们是先处理我们省份的数据,这个过程呢,带大家写的对吧,那么大概的过程其实就是我们对吧,主要在哪呢?主要在我们这个精准的消费这块。对吧,而且这个代码呢,咱们写了很多遍了啊,咱写很多遍了啊,然后接下来呢,用户维度处理这块呢,那么其实这个是我们大家同学上一写的啊,那么基本上呢,也没有太大问题,对吧?那么这个稍微比我们这省份多点内容是什么呢?就是我需要对我们这个用户的。
05:02
年龄段以及呢,咱们这个性别做一个额外的处理,对吧,你给我从我这个数据库里拿出来的只有这的一个年龄对吧?但是呢,呃,我现在我想要的是年龄段啊,就是你现在把年龄拿过来,我我想看判断一下还是哪个年龄段的这块代码呢,需要你自己额外去做一下啊,需要你做额外自己做一下,然后接下来再往下呢,这是关于我们这个性别的处理,其实就是做一个分支判断,然后最后呢,把它也是保存到我们这个H被动去啊呃,然后再往下这块呢,是利用我们这个啊这个ma它的一个bootrap工具来完成一个初始化的功能,那么这块大家注意啊,本身呢,它本身这个puttrap呀,它并不具备咱们这个同步的一个能力,对吧?它其实只是干什么呢?它其实只是个把这个事呢,交给咱们原来ma这个技程去做了,对吧,那么所以说呢,那我现在对要想去完成同步的话,它是怎么做的,你指定我现在要同步哪个数据库哪张表,那么真正同步的事交给。
06:02
给呢,交给他指定的可的ID,那么去完成这个ID了要求对吧,要和你在我们这个八配置文件中指定的我们这个ID啊,要保持一致啊,这是关于我们呀,上午的内容啊,关于咱们这个上午内容,你们我看有同学测试的时候碰到这个问题了,是吧。如果说啊,那咱们这里要有控制帧的话,那大家注意对吧,那么咱们呢,把我当前的这块这个程序对吧,稍微去改了一下啊,把这个程序呢,去稍微改了一下对吧?呃,那么咱们现在呢,这里有一个属性对叫date啊,咱们先对我这个当前date属性的来做一个判断,那为什么要用对它先做判断呢?大家看啊,咱们现在在我们这个使用我们这个bootrap来生成数据的时候,那么这个时候呢,它对吧会我们当前的对吧,这个生成两个,我两条记录,一个是在最开始的时候,对吧,它要说明一下,说现在我开始对吧帮你生成了,它生成一个叫BOO strip,然后呢,Start是吧,我看一看在最开始上面100个。
07:22
在咱们这块对吧,那它其实呢,在咱生成的时候呢,它会有一个对吧,我现在呢开始生成了对吧,我看一看啊,这它应该有一个start,然后呢,有一个我的complete对一个start complete对吧,那这块呢,可以看看这个也行啊,在这也行对吧,比如说你看我现在在执行的时候这什么啊,上面这一块对这bootrap,然后呢,Completeli对吧,但是这个呢,它其实我date是不是空的呀,对吧,所以说呢,我需要把那个过滤出去啊,我需要把它给过滤出去啊,那么如果要把它过滤出去的话,那这个东西怎么过滤的,那么咱们现在呢,把这个对的对象拿到啊拿对象,然后接下来呢,那么咱们现在呢,在来判断一下它是不是不等于空对吧,如果等于空的话,那这个时候呢,咱就不做处理了,对吧?呃,中午你碰到问题时候是这块嘛,Get j get拿写成该是string是吧,对吧?那么咱们可以看一看啊,那么如果说我现在要是string的话,那这个时候如果他拿不到东西的话,其实呢,他会把咱们这个空啊。
08:23
主要是空串对吧,因为你看这里不就返回一个我们现在这个nu嘛,对吧,如果等于空的话对吧?那么咱现在呢,拿到这个值之后,对吧,那么它呢,其实要做一个转换的,把它转换成字串的对吧?有可能你现在空串对吧,所以说呢,咱们在这里呢,它可能是不等于空,但是呢,它有可能是等于我的空串,咱并没有做处理对吧?所以说呢,我现在如果要是他的话,他会对我当前的这个JS对象的一个数据再做一个处理,因为你想我现在打字本身啊,这个东西是一个什么,这个东西呢,是一个阶触对象对吧?那么它等于空串和什么它是不是为空,这是完全不一样的,如果要是我判断阶对象是为空的话,那我要判断一下,当前它底层那个ma部集合,它是不是没数据。
09:07
对吧,那么如果字符串的话呢,我要判断一下这个字符串的长度对吧,是不是大于零对吧,这这块呢,它的判断方式不一样的,所以说需要注意一下,需要注意一下。然后接着再往下的话呢,那么咱们呢,来看一看啊,那么除了他之外呢,咱们这个上午这个代码呀,基本上就到这儿了,对吧,这个大下去把这块也改一改啊,把这块呢也要去改一下啊,也要去改一下,呃,然后再往下走的话呢,那么咱们呢,就得来看一看,我现在有订单数据了,然后呢,有我们这个用户,然后呢,有我们现在这个省份,那么怎么样去把这给关联起来。啊,怎么样把它关联起来,我现在停一停是吧。
我来说两句